https://school.programmers.co.kr/learn/courses/30/lessons/64064
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약
응모자 아이디 배열 user_id
와, 일부를 *
로 가린 불량 사용자 배열 banned_id
이 주어졌을 때, 제제 아이디 목록은 몇 가지 경우의 수가 가능한지를 return
풀이
permutation을 활용한다. 먼저, user_id
에서 banned_id
의 원소 수만큼 가능한 순열을 모두 구한다. 그리고 구해진 각 순열들을 순회하면서, 해당 순열 내의 user_id
가 banned_id
에 해당될 가능성이 있는 경우, 그 순열에서 중복을 제거한 뒤 answer
에 추가해준다.
마지막으로 answer
의 길이를 리턴해준다.check
함수는 user의 id가 banned_id에 해당되는지의 여부를 판별한다. 둘의 길이가 동일하고, *
를 제외한 나머지 부분이 모두 동일하다면 True를 리턴한다.
from itertools import permutations
def solution(user_id, banned_id):
# 제제아이디 목록은 몇 가지 경우의 수가 가능한가?
def check(user, ban):
if len(user) == len(ban):
for i, j in zip(user, ban):
if j == '*':
continue
elif i != j:
return False
else:
return False
return True
answer = []
for permu in permutations(user_id, len(banned_id)):
flag = True
for i in range(len(banned_id)):
if not check(permu[i], banned_id[i]):
flag = False
if flag:
if set(permu) not in answer:
answer.append(set(permu))
return len(answer)
728x90
'알고리즘' 카테고리의 다른 글
[프로그래머스 요격 시스템] - 파이썬 풀이 (0) | 2024.06.23 |
---|---|
[프로그래머스 보석 쇼핑] - 파이썬 풀이 (0) | 2023.06.02 |
[백준 15686 치킨 배달] - 파이썬 풀이 (골드 5) (0) | 2023.05.22 |
[프로그래머스 프렌즈4블록] - 파이썬 풀이 (0) | 2023.05.17 |
[백준 2096 내려가기] - 파이썬 풀이 (골드5) (0) | 2023.05.14 |