이번 문제는 구현 자체보다 Python의 Dictionary와 정렬(sorted)을 함께 사용하는 방법을 익히는 문제였다.
처음에는 각 스테이지의 인원을
stages.count(stage)
로 하나씩 세면서 실패율을 계산했다.
total = len(stages)
for stage in range(1, N + 1):
count = stages.count(stage)
fail_dict[stage] = count / total
total -= count
전체 인원에서 현재 스테이지 인원을 빼면서 다음 스테이지의 도전자 수를 계산하는 흐름은 자연스럽게 떠올릴 수 있었다.
다만 count()는 호출할 때마다 리스트를 처음부터 끝까지 탐색하기 때문에 비효율적이라는 점을 알게 되었다.
이 문제는 "각 숫자가 몇 번 등장하는가?"를 계속 묻는 문제이므로 Counter를 사용하는 것이 더 적합한 풀이였다.
from collections import Counter
counter = Counter(stages)
그러면
1 → 1명
2 → 3명
3 → 2명
...
처럼 등장 횟수를 한 번에 저장할 수 있다.
앞으로 문제를 읽으면서
"개수를 계속 세고 있네?"
라는 생각이 들면 가장 먼저 Counter를 떠올려야겠다고 느꼈다.
Dictionary 활용이 조금씩 익숙해지고 있다.
최근 풀었던 문제들을 돌아보니 Dictionary를 사용하는 이유가 조금씩 보이기 시작했다.
- 신고 결과 받기 → 이름 → 인덱스
- 가장 가까운 같은 글자 → 문자 → 마지막 위치
- 달리기 경주 → 선수 → 현재 순위
- 실패율 → 스테이지 → 실패율
처음에는 Dictionary를 단순히 값을 저장하는 자료구조라고 생각했다.
지금은
"나중에 빠르게 찾기 위해 미리 기억해두는 공간"
이라는 느낌으로 이해하게 되었다.
구현 문제를 보면 이제는
"이 정보를 Dictionary로 저장할 수 있을까?"
를 먼저 생각하게 된다.
Python에서는 sorted()를 잘 사용하는 것이 중요하다.
이번 문제에서 가장 새롭게 익힌 것은 sorted()의 활용이다.
Dictionary는 그대로는 정렬되지 않기 때문에
fail_dict.items()
를 이용해
(스테이지 번호, 실패율)
형태로 만든 뒤 정렬한다.
sorted(
fail_dict.items(),
key=lambda x: x[1],
reverse=True
)
여기서
lambda x: x[1]
은
실패율(value)을 기준으로 정렬한다.
는 의미이다.
또한 이 문제처럼
실패율이 같으면 스테이지 번호가 작은 순
이라는 조건이 있다면
sorted(
fail_dict.items(),
key=lambda x: (-x[1], x[0])
)
처럼 정렬 기준을 여러 개 줄 수 있다는 것도 알게 되었다.
Python에서는 구현 문제에서 sorted()를 사용하는 경우가 정말 많기 때문에 앞으로는 아래 패턴을 자연스럽게 사용할 수 있도록 익혀둘 예정이다.
# value 기준 오름차순
sorted(dic.items(), key=lambda x: x[1])
# value 기준 내림차순
sorted(dic.items(), key=lambda x: x[1], reverse=True)
# 기준 2개 이상
sorted(dic.items(), key=lambda x: (-x[1], x[0]))
이번 문제 복습 포인트
- 같은 값을 여러 번 세는 문제라면 Counter를 먼저 떠올리기
- Dictionary는 빠르게 찾기 위해 정보를 저장하는 공간이라고 생각하기
- sorted()와 lambda는 Python 구현 문제의 필수 도구
- key를 이용하면 원하는 기준으로 정렬할 수 있다.
- 정렬 기준이 여러 개라면 튜플을 반환하는 방식을 사용할 수 있다.
이번 문제를 통해 느낀 것은 Python 구현 문제에서는 자료구조를 선택하는 능력만큼이나 sorted()를 얼마나 자연스럽게 활용할 수 있는지가 중요하다는 점이다.
앞으로는 Dictionary와 sorted()를 하나의 세트처럼 생각하며 문제를 풀어보려고 한다.
'프로그래밍 > 코딩 테스트, 더 이상 미룰 수 없다' 카테고리의 다른 글
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 lv4 저자 카테고리별 매출 집계하기 - GROUP BY는 '묶는 기준'을 만든다. (0) | 2026.06.28 |
|---|---|
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스lv3 베스트앨범 - 시험 전 복습용: Dictionary + Lambda 정렬 활용 문제 (0) | 2026.06.28 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 lv1 키패드 누르기 - B/DFS와 좌표 계산 분리해서 유형좁히기 (0) | 2026.06.27 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스lv1.신규 아이디 추천 -Python 문자열 정복하기 (0) | 2026.06.27 |
| [코딩 테스트, 더 이상 미룰 수 없다] SQL[1] (0) | 2026.06.27 |