수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
| 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는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[i + 1]
먼저 정렬을 해서 비슷한 형태로 만든 후, 하나하나 비교하며 만약 다르면, 그 사람이 골인을 못 한 것임으로 리턴하고, for 문을 다 돌아도 없다면 마지막에 있는 사람이 골인을 못 한 것임으로 그 사람을 리턴함.
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
리스트에 동일한 자료의 값이 몇 개인지를 딕셔너리 형태로 반환해주므로 collections를 import해서 각 값을 빼준다. 딕셔너리에서는 차연산이 안되지만 Counter 객체는 차연산이 가능하다.
그 후 키 값을 리턴함.
def solution(participant, completion):
answer = ''
temp = 0
dic = {}
for part in participant:
dic[hash(part)] = part
temp += int(hash(part))
for com in completion:
temp -= hash(com)
answer = dic[temp]
return answer
아마 출제자의 의도를 가장 잘 파악한 코드가 아닐까 생각된다.(해쉬를 이용하라고 했으므로)

위에 사진과 같이 먼저 Participant에서 각각의 이름의 해쉬값을 키값으로, 이름을 밸류값에 저장하고 temp에 계속 추가를 시킨다. 그 후 Completion에서 해쉬값을 추출해 빼나간다. 그 후 마지막에 남은 temp값으로 저장해둔 딕셔너리에서 밸류값을 추출한다.