-
[프로그래머스 | 코딩테스트 고득점 Kit] 해시 - 완주하지 못한 선수알고리즘/문제풀이 2026. 10. 22. 05:23

# 해시 풀이
from collections import defaultdict answer = '' cnt = defaultdict(int) for p in participant: cnt[p] += 1 for c in completion: cnt[c] -= 1 for k, v in cnt.items(): if v != 0: answer += k return answer# 스택 풀이
participant.sort() completion.sort() while completion: comp = completion.pop() part = participant.pop() if comp != part: return part return participant.pop()문제 보고 바로 생각난건 스택이었지만, 좋은 방식은 아닌 것 같다.
문제에서는 따로 지시하지 않았지만, 미완주 선수가 2명 이상인 경우에 기능 확장이 어렵다.
# Pythonic한 풀이
from collections import Counter answer = collections.Counter(participant) - collections.Counter(completion) return list(answer.Keys())[0]※ 알아두면 유용한 딕셔너리 모듈
- defaultdict 객체
- 이전에 선언하지 않았던 키를 조회하는 경우, 해당 키의 값을 0으로 자동 세팅해준다.
- 위 소스에서 이름 Key의 Value를 0으로 선언하지 않았어도 defaultdict을 int 타입으로 선언했기 때문에 += 1 연산을 수행해도 에러가 나지 않는다.
- 위 기능은 get(키, 기본값) 메서드로 동일하게 사용할 수 있다. 그러나 해당 메서드는 설정한 기본값을 반환만 하고, 딕셔너리에 저장하지는 않는다.
- Counter 객체
- 아이템에 대한 개수를 자동으로 계산해 딕셔너리 형태로 저장한다.
- 가장 빈도가 높은 아이템을 리턴하는 경우에 most_common(리턴할 요소의 개수) 메서드를 활용한다.
'알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스 | 코딩테스트 고득점 Kit] 해시 - 의상 (0) 2026.10.23 [프로그래머스 | 코딩테스트 고득점 Kit] 해시 - 전화번호 목록 (0) 2026.10.22 [프로그래머스 | 코딩테스트 고득점 Kit] 해시 - 폰켓몬 (0) 2026.10.22 - defaultdict 객체