N

(프로그래머스 JS)불량 사용자 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 JS)불량 사용자

naeunchan 2021. 12. 7. 21:36
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/64064

 

코딩테스트 연습 - 불량 사용자

개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량

programmers.co.kr

const solution = (user_id, banned_id) => {
    const list = [];
    const answer = [];
    
    const dfs = (index, map) => {
        if(index === list.length){
            if(map.size === list.length){
                const string = [];
                
                for(const [k, _] of map){
                    string.push(k);
                }
                
                answer.push(string.sort().join(""));
            }
            return;
        }
        
        for(let i = 0; i < list[index].length; i++){
            if(!map.get(list[index][i])){
                map.set(list[index][i], true);
                dfs(index + 1, map);
                map.delete(list[index][i]);
            }
        }
        
    }
    
    user_id.sort();
    banned_id.sort();
    
    for(let i = 0; i < banned_id.length; i++){
        const bannedId = banned_id[i];
        const candidates = [];
        
        for(let j = 0; j < user_id.length; j++){
            const userId = user_id[j];
            const length = userId.length;
            let keep = true;
            
            if(bannedId.length !== userId.length){
                continue;
            }
            
            for(let k = 0; k < length; k++){
                if(bannedId[k] === "*"){
                    continue;
                }
                
                if(bannedId[k] !== userId[k]){
                    keep = false;
                    break;
                }
            }
            
            if(keep){
                candidates.push(userId);
            }
        }
        
        candidates.sort();
        list.push(candidates);
    }
    
    for(let i = 0; i < list[0].length; i++){
        const map = new Map();
        
        map.set(list[0][i], true);
        dfs(1, map);
    }
    
    return [...new Set(answer)].length;
}
728x90
반응형