[JS/Programmers] 64064. [2019 카카오 개발자 겨울 인턴십] 불량 사용자

정나린·2023년 3월 14일
1

💬 문제

문제 난이도: Programmers Lv.3

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/64064

❗️접근방법

dfs, 문자열

👆 1차 코드(통과✅)

const set = new Set();

function dfs(arr, visited, cur, limit, tmp){
    if(cur === limit) {
        set.add(tmp.sort().toString());
        return;
    }
    for (let i = 0; i < arr[cur].length; i+=1){
        if (!visited[arr[cur][i]]){
            visited[arr[cur][i]] = 1;
            dfs(arr, visited, cur+1, limit, tmp.concat([arr[cur][i]]))
            visited[arr[cur][i]] = 0;
        }
    }
}

function solution(user_id, banned_id) {
    const arr = [];
    for (let i = 0; i < banned_id.length; i+=1){
        const banned = banned_id[i];
        const tmp = [];
        for (let j = 0; j < user_id.length; j+=1){
            const id = user_id[j];
            let flag = true;
            if(banned.length !== id.length) continue;
            for (let k = 0; k < banned.length; k+=1){
                if (banned[k]==='*') continue;
                else if(banned[k] !== id[k]) {
                    flag = false;
                    break;
                }
            }
            if(flag) tmp.push(j);
        }
        arr.push(tmp);
    }
    const visited = new Array(user_id.length).fill(0);
    dfs(arr,visited ,0, banned_id.length, []);
    return set.size;
}

0개의 댓글