Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- aws iam role
- AWS KMS
Archives
- Today
- Total
기록
[programmers/python] 마라톤 완주자 찾기 - collections.Counter 본문
문제
- url : https://school.programmers.co.kr/learn/courses/30/lessons/42576
- 참가자 수: 1명 이상 100,000명 이하
- 이름: 알파벳 소문자, 길이 1~20자
- 완주자 수: 참가자 수 - 1
- 동명이인 존재 가능
예시
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), 매우 빠름
'코딩테스트 > python' 카테고리의 다른 글
[programmers/python] 전화번호부 접두어 - 정렬 vs 해시맵 (0) | 2025.05.24 |
---|---|
[programmers/python] 폰켓몬 - 최대한 다양한 종류 고르기, Set (0) | 2025.05.24 |
[programmers/python] 카펫 - 완전탐색 (0) | 2025.05.22 |
[programmers/python] 소수찾기 - 완전탐색, 에라토스테네스의 체 (0) | 2025.05.21 |
[programmers/python] 모의고사 - 완전탐색 (0) | 2025.05.21 |
Comments