문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
participant | completion | return |
---|---|---|
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
입출력 예 설명
예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
※ 공지 - 2023년 01월 25일 테스트케이스가 추가되었습니다.
<내코드>
def solution(participant, completion):
value = {}
for p in participant:
if value.get(p, 0) == 0:
value[p] = 1
else :
value[p] += 1
for c in completion:
if value.get(c, 0) == 0:
value[c] += 0
else :
value[c] -= 1
for k, v in value.items():
if v != 0 :
return k
처음에는 해시라고 하길래 딕셔너리를 바로 떠올리지 못했다
그만큼 아직 낯선부분이 많은듯 함
이번에 그래도 해시에 익숙해져서 좋다
<모범사례>
- collections 모듈의 Counter 클래스 이용한 경우
from collections import Counter
def solution(participant, completion):
participant_count = Counter(participant)
completion_count = Counter(completion)
for p in participant_count:
if participant_count[p] != completion_count[p]:
return p
collections 모듈의 Counter 클래스 : Counter(['apple', 'banana', 'apple'])는 {'apple': 2, 'banana': 1}을 반환하는 방식임
- 모듈사용 제한된 경우
def solution(participant, completion):
# 참가자 명단을 카운팅하기 위한 딕셔너리
participant_count = {}
# 참가자 명단을 카운팅
for p in participant:
if p in participant_count:
participant_count[p] += 1
else:
participant_count[p] = 1
# 완주자 명단을 이용해 참가자 카운트를 줄임
for c in completion:
if c in participant_count:
participant_count[c] -= 1
# 카운트가 0이 아닌 참가자를 반환
for p in participant_count:
if participant_count[p] > 0:
return p
굳이 .get(key,default)를 사용안해도 충분히 가능한 방식임
즉 in 은 key 에 대해서 탐색이 충분히 가능함
<추가학습>
추상자료형 딕셔너리는 hash table 자료구조로 구현하는것을 알게됨
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[stack/queue]99클럽 코테 스터디 7일차 TIL + 프로그래머스/1/12906. 같은 숫자는 싫어 (0) | 2024.07.28 |
---|---|
[hash]99클럽 코테 스터디 6일차 TIL + 프로그래머스/1/1845. 폰켓몬 (0) | 2024.07.27 |
99클럽 코테 스터디 4일차 TIL + 프로그래머스/1/12925. 문자열을 정수로 바꾸기 (0) | 2024.07.25 |
99클럽 코테 스터디 3일차 TIL + 프로그래머스/1/12916. 문자열 내 p와 y의 개수 (1) | 2024.07.24 |
99클럽 코테 스터디 2일차 TIL + 프로그래머스/1/12944. 평균 구하기 (0) | 2024.07.23 |