프로그래머스 : 불량 사용자
https://school.programmers.co.kr/learn/courses/30/lessons/64064
프로그래머스 3단계, 2019 카카오 개발자 겨울 인턴십 문제입니다.
코드
function solution(user_id, banned_id) {
let answer = 0;
const bannedList = banned_id.map((_) => 0);
const set = new Set();
const dfs = (index, count, text) => {
if(count === banned_id.length){
set.add(text.split(' ').sort().join(''));
}
if(index >= banned_id.length){
return;
}
for (let i = index; i < banned_id.length; i++) {
for (let j = 0; j < user_id.length; j++) {
if (bannedList[j] === 1) continue;
if (!checkIsMatchedId(banned_id[i], user_id[j])) continue;
bannedList[j] = 1;
dfs(i+1, count+1, text + ' ' + user_id[j]);
bannedList[j] = 0;
}
}
}
dfs(0, 0, "");
return set.size;
}
const checkIsMatchedId = (bannedId, userId) => {
if(bannedId.length !== userId.length){
return false;
}
for(let i=0; i<userId.length; i++){
if(userId[i] !== bannedId[i] && bannedId[i] !== '*'){
return false;
}
}
return true;
}
리뷰
처음에 배열의 인덱스를 기준으로 dfs 를 탐색을 하려 했지만 i, j, index 숫자 늪에 빠져 실패하고 닉네임을 기준으로 재구현했습니다..ㅋ
탐색을 할때는 banned_id 의 길이만큼 끝까지 탐색을 하며, 이중 반복문 내부에서 재귀를 통해 매칭되는 모든 user_id를 기록 후 중복을 없애주어야합니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
스킬트리 / js 풀이 (0) | 2021.08.31 |
---|---|
[1차] 뉴스 클러스터링 / js 풀이 (0) | 2021.08.31 |
괄호 변환 / js 풀이 (0) | 2021.08.28 |
프린터 / js 풀이 (0) | 2021.08.06 |
튜플 / js 풀이 (0) | 2021.08.02 |