티스토리 뷰

programmers.Level3

Javascript - 불량 사용자

코딩하는 둥아 2022. 10. 21. 19:53
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🌸 문제 접근

  1. banned_id를 기준으로 탐색을 한다. (dfs의 count 변수는 banned_id를 탐색할 인덱스입니다.)
  2. 유저 아이디가 해당 banId에 해당이 된다면, 다음번 banned_id에 해당하는 유저 아이디가 있는지 체크하기 위해 dfs를 한번 더 돌린다.
    1. 이 때, 한 번 제한된 아이디는 한번 더 제한될 수 없기 때문에 해당하는 userId의 visited를 true로 만들어준다.
  3. 그리고 제한된 아이디 모두에 유저 아이디가 매칭이 되면 answer에 추가해준다.
    1. 그런데 ids안에서 유저 아이디의 순서만 다른 경우는 같은 경우에 해당되므로 같은 경우가 없는 경우에만 answer에 추가해준다.
    2. 배열의 동일 유무를 판단해야 하므로, sort()로 정렬을 한 후 JSON.stringify로 스트링으로 변환한 후 같은지 아닌지를 판단했다.
  4. 그렇게 구해진 answer의 길이가 우리가 구해야 하는 경우의 수가 된다.

 

function solution(user_id, banned_id) {
    var answer = [];
    const userNum = user_id.length;    
    var visited = new Array(userNum).fill(false);
    
    // 유저의 아이디가 제한된 아이디인지를 판단하는 함수
    function isBanId(banId, userId) {
        let isBan = true;
        if (banId.length !== userId.length) return false;
        
        for (let j=0 ; j<userId.length ; j++) {
            if (banId[j] === '*')   continue;
            if (banId[j] !== userId[j]) {
                isBan = false;
                break;
            }
        }
        return isBan;
    }
    
    function dfs(count, ids) {
        if (count === banned_id.length) {
            let flag = true;
            for (let i=0 ; i<answer.length ; i++) {
            	// answer에 같은 답이 있는지 확인
                if (JSON.stringify(answer[i].sort()) === JSON.stringify(ids.sort()))  flag=false;
            }
            if (flag)   answer.push(ids);
            return;
        }
        
        const banId = banned_id[count];
        for (let i=0 ; i<userNum ; i++) {
            const userId = user_id[i];
            
            if (isBanId(banId, userId) && !visited[i]) {
                visited[i] = true;
                dfs(count+1, [...ids, userId]);
                visited[i] = false;
            }
        }
    }
    
    dfs(0, []);
    
    return answer.length;
}
728x90

'programmers.Level3' 카테고리의 다른 글

javascript - 입국 심사  (0) 2022.10.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함