수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 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):
answer = ''
hashTable = {}
for i in range(len(completion)):
if hash(completion[i]) in hashTable.keys() :
hashTable[hash(completion[i])] += 1
else:
hashTable[hash(completion[i])] = 1
for j in range(len(participant)):
if hash(participant[j]) in hashTable.keys() and hashTable[hash(participant[j])] != 0:
hashTable[hash(participant[j])] -= 1
else:
answer = participant[j]
break
return answer
이번 문제는 Hash
를 주제로 한 문제입니다. 하지만 Hash
에 대해서 잘 몰라서 찾아보았더니이 문제를 sort
로 푼 분들이 많았습니다. 저는 Hash
로는 어떻게 푸는지 궁금해서 다양한 접근을 해보았는데 위의 코드로 모든 테스트를 통과하는데 성공했습니다.
먼저 hashTable
이라는 Dictionary
를 정의해주었습니다. 이곳에 hash()
함수를 통해 변환된 값을 Key
로 입력할 것입니다.
코드에 크게 2개의 반복문이 있는데 위의 반복문은 completion
의 요소들을 hashTable
에 입력하는 과정, 아래의 반복문은 participant
의 요소 중에 완주하지 못한 선수가 누군지 찾는 과정입니다.
위의 반복문은 completion
의 길이만큼 반복되며 hash(completion[i])
라는 key
가 hashTable
에 있는지 확인합니다. 만약 없다면 key
가 hash(completion[i])
, value
가 1
로 추가해줍니다. 반대로 존재한다면 해당 쌍의 value
를 1 더해줍니다.
아래의 반복문은 participant
의 길이만큼 반복되며 hash(participant[i])
가 hashTable
에 존재하는지 그리고 해당 쌍의 value
가 0
이 아닌지 확인합니다. 만약 존재하지만 0이 아니라면 -1
을 해줍니다. 이 과정이 있는 이유는 만약 completion
에 동명이인이 존재할때 value가 2일테니 -1
을 해도 아직 1이 남아있습니다.
만약 두 조건을 충족하지 못하면 완주하지 못한 선수이니 participant[j]
를 answer로 정의하여 반환해줍니다.