🔗 1. 문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 2. 문제 요구사항 정리
1번, 2번, 3번 수포자가 각각 자신만의 규칙적인 반복 패턴으로 문제를 찍을 때, 주어진 정답 배열 answers와 비교하여 가장 많은 문제를 맞힌 사람이 누구인지 구하는 문제입니다.
- 최종 출력 배열: 가장 많은 문제를 맞힌 사람의 번호 리스트 (1번, 2번, 3번)
- 정렬 조건: 가장 많이 맞힌 사람이 여러 명일 경우, 번호를 기준으로 오름차순 정렬하여 반환
💡 3. 핵심 개념
✔ 1) 찍기 패턴의 주기성과 나머지 연산(%)
수포자들의 패턴 길이는 각각 5개, 8개, 10개로 다릅니다. 문제의 개수가 이보다 많아지더라도 패턴이 처음부터 반복되어야 하므로, 현재 문제의 인덱스(idx)를 패턴의 길이(len(pat))로 나눈 나머지 연산(idx % len(pat))을 통해 정답을 순환하며 비교합니다.
✔ 2) enumerate()를 활용한 데이터 추출
정답 배열을 돌면서 현재 몇 번째 문제인지 확인하는 인덱스(idx)와 실제 정답 값(ans)이 동시에 필요합니다. for idx, ans in enumerate(answers): 구조를 사용하면 이를 임시 변수 없이 깔끔하게 제어할 수 있습니다.
✔ 3) 최고 득점자 선별 및 동점자 처리
max(counts) 함수를 통해 세 사람 중 가장 높은 점수를 먼저 찾습니다. 이후 점수 배열을 순회하며 최고 점수와 일치하는 사람의 인덱스에 +1을 해준 뒤(사람 번호는 1부터 시작하므로) 결과 배열에 담아줍니다. 순서대로 검사하기 때문에 동점자 정렬 조건(오름차순)도 자연스럽게 만족합니다.
✅ 4. 정답 Python 코드
def solution(answers):
# 정답이 들어있는 배열 answers
# '모든' 문제를 찍는다
# 1번 -> 1,2,3,4,5 / 5개
# 2번 -> 2,1,2,3,2,4,2,5 / 8개
# 3번 -> 3,3,1,1,2,2,4,4,5,5 / 10개
# 가장 많은 문제를 맞힌 사람 배열에 담기
# 여럿일 경우 오름차순 정렬
# 1번, 2번, 3번 사람 각자 맞은 개수 구해서 리스트에 전부 넣기
# answer.len 2개 이상이면 정렬하기
answer = []
patterns = [
[1,2,3,4,5],
[2,1,2,3,2,4,2,5],
[3,3,1,1,2,2,4,4,5,5]
]
counts = [0, 0, 0]
for idx, ans in enumerate(answers):
for i, pat in enumerate(patterns):
if pat[idx % len(pat)] == ans:
counts[i] += 1
mostCount = max(counts)
# 혹시 맞은 개수 같은 사람 있으면
for i, count in enumerate(counts):
if counts[i] == mostCount:
answer.append(i + 1)
return answer
💬 5. 풀이하면서 느낀 점
이번 문제를 풀면서 파이썬의 enumerate() 내장 함수에 대해 까먹고 있었는데 공부하고 활용해 볼 수 있는 좋은 계기였습니다.
기존에는 반복문을 돌릴 때 단순히 요소의 값만 꺼내 쓰거나 별도의 인덱스 카운터 변수를 선언해서 쓰곤 했는데, enumerate()를 사용하니 인덱스(순서)와 원소를 튜플 형태로 동시에 안전하게 꺼내올 수 있어서 코드가 훨씬 직관적이고 군더더기 없어졌습니다.
특히 찍기 패턴처럼 특정 주기로 인덱스가 순환해야 하는 구조에서는 인덱스 값 제어가 필수적인데, 이중 for문 내부에서도 두 번의 enumerate()를 엮어내어 각 수포자의 점수를 효율적으로 합산해 낼 수 있었습니다. 완전탐색의 기본기를 다질 수 있는 기회였습니다.
궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요. 도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊
'코딩테스트 > 알고리즘' 카테고리의 다른 글
| [프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설 (0) | 2026.06.11 |
|---|---|
| [프로그래머스 LV.2] 행렬의 곱셈 — Python 정답 & 해설 (0) | 2026.05.22 |
| [프로그래머스 LV.1] 두 개 뽑아서 더하기 — Python 정답 & 해설 (0) | 2026.05.21 |
| [프로그래머스 LV.2] 조건에 맞는 개발자 찾기 — MySQL 정답 & 해설 (0) | 2025.11.27 |
| [SWEA 1926] 간단한 369 게임 — Java 풀이 & 해설 (0) | 2025.11.22 |