기록

[programmers/python] 마라톤 완주자 찾기 - collections.Counter 본문

코딩테스트/python

[programmers/python] 마라톤 완주자 찾기 - collections.Counter

zyin 2025. 5. 24. 18:27

문제


예시

participant = ["leo", "kiki", "eden"]
completion = ["eden", "kiki"]
# 결과: "leo"
participant = ["mislav", "stanko", "mislav", "ana"]
completion = ["stanko", "ana", "mislav"]
# 결과: "mislav"

핵심 아이디어

이름이 중복될 수 있다. 단순 정렬이나 반복문만으로는 정확히 잡아내기 어렵다.
각 이름이 몇 번 나왔는지를 세야 한다. 여기서 collections.Counter가 유용하다.

  • Counter는 리스트의 요소 개수를 세는 딕셔너리 기반 자료구조다.
  • 두 Counter의 차이를 구하면, 완주하지 못한 사람이 나온다.

코드

from collections import Counter

def solution(participant, completion):
    pc = Counter(participant)
    cc = Counter(completion)
    return list((pc - cc).keys())[0]

설명

  • pc: 참가자 이름별 수량
  • cc: 완주자 이름별 수량
  • pc - cc: 참가자에서 완주자를 뺀 결과 → 딱 1명 남는다
  • .keys()[0]: 남은 한 명의 이름 반환

시간 복잡도

  • Counter 생성: O(N)
  • 차이 계산: O(N)
  • 결과 추출: O(1)
    → 전체 O(N), 매우 빠름
Comments