알고리즘 문제풀이/프로그래머스

불량 사용자 / js 풀이

Heman 2023. 7. 30. 01:04

프로그래머스 : 불량 사용자

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