프로그래밍/코딩 테스트, 더 이상 미룰 수 없다

[코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 Lv1 실패율 - Python의 매력, Dictionary와 정렬의 자유도

d 0_0 b 2026. 6. 27. 20:14

이번 문제는 구현 자체보다 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()를 하나의 세트처럼 생각하며 문제를 풀어보려고 한다.