말랑한 하루
[Programmers] 불량 사용자 (Lv 3, JavaScript) 본문
반응형
[ 학습 내용 ]
정규표현식 활용 및 얕은복사 필요성
[ 소스 코드 ]
function solution(user_id, banned_id) {
var answer = 0;
var list_all = [];
function matches(u_id, b_id) {
var pattern = b_id.replace(/\*/g, ".");
var reg = new RegExp(`\^${pattern}\$`);
return reg.test(u_id);
}
function dfs(list_id, ban_idx, cnt) {
if (cnt === banned_id.length) {
list_all.push([...list_id]);
return;
}
for(var i=0; i<user_id.length; i++) {
if (list_id.indexOf(user_id[i]) !== -1) continue;
if (!matches(user_id[i], banned_id[ban_idx])) continue;
list_id.push(user_id[i]);
dfs(list_id, ban_idx + 1, cnt + 1);
list_id.pop();
}
}
dfs([], 0, 0);
answer = new Set(list_all.map((list => list.sort().join("")))).size;
return answer;
}
[ 코드 분석 ]
아이디가 일치하는 모든 경우의 수를 구하고, 중복되는 경우를 배제했을 때 문제에서 원하는 답이 도출된다.
matches의 패턴일치 확인을 위한 정규표현식 활용은 다양한 방면에 사용되니 숙지할 것
dfs에서 list_all.push() 부분에서 list_id 배열을 그냥 push하는 경우 추후 list_all에는 아무것도 남아있지 않음. dfs 에서 ist_id의 배열이 list_all 내부에 참조되어 같이 제거되어 이 부분에 깊은복사가 꼭 필요했다.
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Programmers] 튜플 (Lv 2, JavaScript) (0) | 2022.09.19 |
---|---|
[Programmers] 캐시 (Lv 2, JavaScript) (0) | 2022.09.19 |
[Programmers] 보석 쇼핑 (Lv 3, JavaScript) (0) | 2022.07.20 |
[Programmers] 수식 최대화 (Lv 2, JavaScript) (0) | 2022.07.18 |
[Programmers] 거리두기 확인하기 (Lv 2, JavaScript) (0) | 2022.07.13 |
Comments