<문제 설명>
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 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" |
<문제 해결>
- participant에는 있고 completion에는 없는 한 명을 찾아라
- 각 각 P, C 배열에 중복되는 값(동명이인)이 있을 경우 순서는 중요하지 않다
- 우리가 찾아야 하는것은 participant = p 배열과 completion = c 를 확인한다.
- c 배열에 남아있는 사람만큼 for문을 돌린다
- 이때 sort된 배열 안에 서로 값을 비교했을 때 값이 다르면 p 의 배열에 있는 값을 뽑아낸다
- 그럼에도 값이 나오지 않는경우는 마지막인 경우이기 때문에 p[i] = 마지막 배열 값
return participant[len(participant) -1] 을 해준다.
def solution(participant, completion):
# 1. 두 리스트를 sorting을 한다.
participant.sort()
completion.sort()
#2. completion list의 lenght만큼을 돌면서, participant() 에만 존재하는 한 명을 찾는다.
for in range(len(completion):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant[i]) -1] #3.그럼에도 안나오면 마지막인덱스를 찾아간다.
<Hash 를 이용한 방법 >
def solution(participant, completion):
hashDict = {}
sumHash = 0
# 1. participant list의 구하고 ,hash 값을 더한다
for part in participant:
hashDict[hash(part)] = part
sumHash += hash(part)
# 2. completion list 의 hash을 빼준다.
for comp in completion:
sumHash -= hash(comp)
# 3. 남은 값이 완주하지 못한 선수의 hash 값이 된다.
return hashDict[sumHash]