728x90
반응형
[level 2] 비밀 코드 해독 - 388352
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/388352)
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

💻 문제 정의
1부터 n까지의 서로 다른 정수 5개가 오름차순으로 정렬된 비밀 코드를 해독해야 한다. 주어진 q 리스트에 지금까지 시도한 비밀번호 경우의 수가 나오고 ans 리스트에는 해당 경우에 대한 정답이 몇 개인지 들어있다.
다음의 결과를 바탕으로 가능한 비밀번호가 최대 몇 개가 나오는지를 구하는 문제이다.
💡 접근 및 설계
1부터 n까지의 수열을 생성한다. 해당 수를 바탕으로 5자리수 조합을 생성한다. 생성된 5자리수와 지금까지 시도한 비밀번호들을 비교해보며 ans에 저장된 값과 일치한 수열들만을 뽑아낸다.
최종적으로 남아있는 수열의 개수가 가능한 최대 비밀번호의 개수가 된다.
✏️ 알고리즘 풀이
from itertools import combinations
numbers = [i for i in range(1, n+1)]
answers = list(combinations(numbers, 5))
1 부터 n 까지의 수열을 생성하였다. 그리고 combinations 를 통해 5자리 비밀번호 조합을 생성하였다.
cnt = 0
for i in range(len(q)):
new_answers = []
for a in answers:
if len(set(a) & set(q[i])) == ans[i]:
new_answers.append(a)
answers = new_answers
5자리 수열과 시도한 비밀번호를 서로 비교하며 겹치는 숫자의 수가 ans와 동일한 수열만 따로 저장한다. 이때 교집합 연산을 활용하였다.
최종적으로 new_answers에 저장된 수열의 개수를 반환하면 된다.
🗒️ 최종 제출 코드
from itertools import combinations
def solution(n, q, ans):
numbers = [i for i in range(1, n+1)]
answers = list(combinations(numbers, 5))
cnt = 0
for i in range(len(q)):
new_answers = []
for a in answers:
if len(set(a) & set(q[i])) == ans[i]:
new_answers.append(a)
answers = new_answers
return len(new_answers)
💭 오늘의 회고
-
728x90
반응형
'Coding-Test > 프로그래머스' 카테고리의 다른 글
| [SQL] 상품을 구매한 회원 비율 구하기 (0) | 2026.03.05 |
|---|---|
| [Python] 에어컨 (0) | 2026.03.05 |
| [SQL] 저자 별 카테고리 별 매출액 집계하기 (0) | 2026.03.03 |
| [SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2026.03.02 |
| [SQL] 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.02 |