
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/64064
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
*2019 카카오 개발자 겨울 인턴십 문제
문제 설명



제한 사항

입출력 예시

풀이 방법
처음에는 이중 for문으로 banned_id와 user_id를 비교해서 불량사용자 아이디 쌍을 찾은 다음, 조합의 경우의 수를 찾으려고 했다.
입출력 예시 중 첫번째 예시를 예를 들면
0: [frodo, frodi], 1: [abc123]
이런 dictionary를 하나 만들어서 value 값들의 조합의 수를 구하려고 했는데
value 값들의 조합의 수를 구하는게 쉽지 않아서 고민하다가...
user_id에서 나올 수 있는 모든 경우를 고려한 다음, banned_id와 매핑 되는 쌍을 남기는 방법으로 변경해서 풀었다.
python의 개념은 itertools의 permutations와 set 자료 구조를 유용하게 사용했다.
정답 코드
from itertools import permutations
def check_id(banned_id, combi, answer_set):
for i in range(len(banned_id)):
if len(banned_id[i]) != len(combi[i]):
return False
flag = True
for i in range(len(banned_id)):
b_id = banned_id[i]
c_id = combi[i]
for j in range(len(b_id)):
if b_id[j] != c_id[j] and b_id[j] != "*":
flag = False
break
if flag:
answer_set.add(tuple(sorted(combi)))
def solution(user_id, banned_id):
answer_set = set()
for combi in permutations(user_id, len(banned_id)):
check_id(banned_id, list(combi), answer_set)
return len(answer_set)'개발 > 알고리즘' 카테고리의 다른 글
| [프로그래머스] 전화번호 목록 Python 풀이 (0) | 2025.05.27 |
|---|---|
| [프로그래머스] Lv3. 섬 연결하기 Javascript 풀이 (feat. MST) (0) | 2025.05.08 |
| [프로그래머스] Lv2. 괄호 회전하기 (6) | 2024.07.19 |
| [프로그래머스] Lv2. 연속 부분 수열 합의 개수 (0) | 2024.07.17 |
| [프로그래머스] LV2. 영어 끝말잇기 (2) | 2024.07.15 |