이번 문제는 불량 사용자 문제이다.
게임 설명에서 나타나듯이 2019 카카오 개발자 겨울 인턴십 문제이다...
위 설명과 같이 총 2개의 리스트를 전달 받는데 하나는 당첨자의 id가 담긴 user_id, 하나는 불량 아이디 목록이 담긴 banned_id 이다.
즉 불량 사용자 아이디 하나당 하나의 응모자 아이디를 불량 사용자로 설정 가능하다.
만약 전달받은 아이디가 [a, b, c, dd] 이고 불량 사용자[*] 이라면 아이디가 한 글자인 사용자 중 한명을 선정하여 불량으로 처리하며, 이때 불량으로 처리 가능한 방법은 [a], [b], [c] 총 3가지가 된다.
입출력 2번을 먼저 살펴보면
*rodo가 2번 나온다, 그리고 *frodo 로 제재 가능한 아이디는 frodo 오 crodo 이다.
그리고 ****** 은 user_id의 길이가 6인 아이는 제재 가능하다.
따라서 제재 가능한 아이디 조합은 [frodo, crodo, abc123] 또는 [frodo,crodo,frodoc] 이다.
이제 코드를 작성해보자
permutations()을 사용한 이유는 추출한 제재 가능한 아이디를 순서에 맞춰서 뽑기 위함이다.
먼저 3중 반복문을 통해 user_id 와 banned_id 를 비교하여 제재 가능한 아이디를 추출해 준다.
이때 dic[] 에는 각banned_id[index] 에 맞춰서 제재 가능한 아이디가 2차원 배열로 저장된다.
즉 dic[1] 에는 banned_id[1]이 제재 가능한 아이디들이 저장된다.
추출한 comb는 set()을 이용하여 중복값들을 제거해 주었다.
그리고 permutations 를 이용해 comb 에서 len(dic)만큼의 개수들을 조합한 순열을 생성한 다음,
이 순열을 다시 반복문으로 돌면서 해당 순열[i] 가 dic[i] 에 포함되어 있는 경우에만 올바른 조합법으로 간주한다.
break를 거치지 않고 완주한 list_comb는 다시 else문을 통과하는데, 튜플형태의 list_comb 를 분리하여 집합으로 바꾸어 준다.
그렇게 생성된 n_list 를 temp 에 넣어주는데, 만약 중복값이 존재한다면 건너띄면 된다.
그리고 최종적으로 temp 의 길이가 제재 가능한 조합의 총 방법이 된다.
'프로그래머스 퀴즈(Python) > level 3' 카테고리의 다른 글
23.03.21 파이썬 코딩 퀴즈#201 경주로 건설 (프로그래머스 스쿨) (0) | 2023.03.21 |
---|---|
23.03.17 파이썬 코딩 퀴즈#200 보석 쇼핑 (프로그래머스 스쿨) (0) | 2023.03.17 |
23.03.16 파이썬 코딩 퀴즈#198 징검다리 건너기 (프로그래머스 스쿨) (0) | 2023.03.16 |
23.03.16 파이썬 코딩 퀴즈#197 블록 이동하기 (프로그래머스 스쿨) (0) | 2023.03.16 |
23.03.14 파이썬 코딩 퀴즈#196 외벽 점검 (프로그래머스 스쿨) (0) | 2023.03.14 |