https://school.programmers.co.kr/learn/courses/30/lessons/42576
이 문제는 해시맵을 사용하면 효율적으로 풀 수 있다.
파이썬에서는 해시맵을 딕셔너리라는 이름으로 제공하고 있다.
https://vegetableworld.tistory.com/48
코드는 다음과 같이 작성하였다.
def solution(participant, completion):
participant_count = {}
for name in participant:
if name in participant_count:
participant_count[name] += 1
else:
participant_count[name] = 1
# 완주자 수를 줄이기
for name in completion:
participant_count[name] -= 1
# 완주하지 못한 선수 찾기
for name in participant_count:
if participant_count[name] > 0:
return name
- for name in participant:
- participant 리스트에 있는 각 참가자의 이름을 하나씩 name이라는 변수에 할당하며 반복
- if name in participant_count:
- 현재 name이 participant_count 딕셔너리에 이미 존재하는지 확인
- 만약 존재한다면, 즉 이 이름이 이미 한 번 이상 등장한 경우
- participant_count[name] += 1:
- participant_count 딕셔너리에서 해당 name의 값을 1 증가시킴
- 이는 해당 참가자가 추가로 등장했음을 의미
- else:
- name이 participant_count 딕셔너리에 존재하지 않는다면, 즉 이 이름이 처음 등장하는 경우
- participant_count[name] = 1:
- participant_count 딕셔너리에 name을 키로 하고, 그 값을 1로 설정
- 이는 이 참가자가 한 번 등장했음을 나타냄
- 완주자 수 줄이기:
- 초기 participant_count: {"leo": 1, "kiki": 1, "eden": 1}
- completion을 순회하며:
- "kiki"의 출현 횟수 감소 → {"leo": 1, "kiki": 0, "eden": 1}
- "eden"의 출현 횟수 감소 → {"leo": 1, "kiki": 0, "eden": 0}
- 완주하지 못한 선수 찾기:
- participant_count를 순회하며:
- "leo"의 출현 횟수는 1이므로, 반환됩니다.
- participant_count를 순회하며:
'Algorithm > 코딩테스트 고득점 Kit' 카테고리의 다른 글
[고득점 Kit / 스택&큐] 기능개발 (0) | 2024.09.05 |
---|---|
[고득점 Kit / 스택&큐] 같은 숫자는 싫어 (0) | 2024.09.04 |
[고득점 Kit / 해시] 의상 (Counter, 리스트 컴프리헨션) (0) | 2024.09.02 |
[고득점 Kit / 해시] 전화번호 목록 (find, startswith, endswith) (0) | 2024.09.02 |
[고득점 Kit / 해시] 폰켓몬 (0) | 2024.09.01 |