[프로그래머스] Lv3. 불량 사용자- JavaScript

이상돈·2023년 4월 3일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 3

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

문제

제한사항

📌 내가 생각한 풀이

우선 check함수를 만들어서, 두 문자열이 같은지 판단하고, 그 다음은 재귀함수를 이용하여, bfs함수를 만들자. check가 true인 원소를 result배열에 담고, 원소가 다 담기면 arr에 담자. 또한 담은 배열들은 순서에 상관있기 때문에, 중복을 제거한 배열들이 답에 해당되므로, 중복된 원소들을 제거해주고 개수를 세어 정답을 Return 해주자.
const check = (str1 ,str2) =>{
    if(str1.length === str2.length){
        for(var i =0; i<str1.length; i++){
            if(str1[i] !== str2[i] && str2[i] !== '*'){
                return false;
            }
        }
        return true;
    }else{
        return false;
    }
}
let arr = []

const bfs = (arr1, arr2,idx,resulted) => {
    if(arr2.length === 0) {
        arr.push(resulted)
        return resulted
    }
    arr1.forEach((d,i,o)=>{
        let rest = [...o.slice(0,i), ...o.slice(i+1)]
        if(check(d, arr2[0])){
            let result = [...resulted]
            result.push(d);
            bfs(rest, arr2.slice(1), 0, result)
            
        }
    })
    return 0;
}

function solution(user_id, banned_id) {
    var answer = 0;
    let obj = {};
    bfs(user_id, banned_id,0,[]);
    answer = (new Set(arr.map(i => i.sort().join()))).size
    return answer;
}

📌 느낀점

배열의 순서가 같아도 중복이 안잡히기 떄문에, join으로 문자열로 변환 후 순서를 잡아주어야 한다. 또한 Set을 이용하면 중복을 쉽게 제거할 수 있다. 재귀함수는 여러번 공부하였기때문에 쉽게 만들 수 있었다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글