[프로그래머스 알고리즘] 불량 사용자 JavaScript JS

 

프로그래머스

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

programmers.co.kr

😉문제 풀이 설명

아래는 브루트 포스, 완전 탐색을 이용한 문제풀이 입니다.

user_id 배열의 길이가 8 이하임을 캐치하고 완전 탐색으로 풀었습니다.

재귀를 이용하여 풀었고, 같은 문자열임을 확인하는 데는 정규 표현식을 사용하였습니다.

  1. pick_arr는 현재 선택한 user_id를 뜻합니다. pick_arr[i] 값이 0이면 user_id[i] 선택되지 않았고, 1이라면 선택되었음을 뜻합니다.
  2. answer_arr에는 경우의 수를 담습니다. banned_index를 완전히 순회한다면 pick_arr를 join한 형태로 answer_arr에 담습니다. ex)01100 > index값이 1과 2인 user_id의 값을 선택하였다.

😎문제 풀이 코드

function solution(user_id, banned_id) {
    const pick_arr = Array(user_id.length).fill(0)
    const answer_arr = []
    
    function next(banned_index){
        if(banned_index >= banned_id.length){
            answer_arr.push(pick_arr.join(""))
            return
        }
        const banned_name = banned_id[banned_index]
        const reg_str = banned_name.split("").map(v=> v==="*" ? "\\w" : v).join("")
        const reg = new RegExp(`^${reg_str}$`)
        user_id.forEach((user_name,user_index)=>{
            if(reg.test(user_name)){
                if(!pick_arr[user_index]){
                    pick_arr[user_index] = 1;
                    next(banned_index+1)
                    pick_arr[user_index] = 0;
                }
            }
        })
    }
    next(0)
    
    return [...new Set(answer_arr)].length;
}