participant : [sam,sam,sam,john,john]
completion : [sam,sam,sam,john]
이라면 동명이인이 가장 많다고 정답일 수 없고 적다고 해도 정답이라고 확신할 수 없다. 검색을 통해 hash()
함수에 대해 할게 되어 이를 활용했다.hash()
함수는첫 번째
def solution(participant, completion):
result = []
for c in participant:
if c not in completion:
return c
elif c in completion and c not in result:
result.append(c)
else:
return c
단순하게 for문으로 비교해서 completion에 없는 participant를 찾고자 했지만 효율성 테스트는 하나도 통과하지 못했고 정확성 테스트도 테스트5, 6을 통과하지 못했다.
동명이인인 이름이 2가지가 이상 일때, 위의 sam과 john 같은 테스트 케이스를 걸러내지 못한다.
두 번째
def solution(participant, completion):
hash_table = {}
for c in completion:
hash_table[c] = 0
for p in participant:
if p in hash_table:
hash_table[p] += 1
elif p not in hash_table:
return p
for key, value in hash_table.items():
if value == 2:
return key
두 번째 코드는 정확성 테스트 5와 효율성 테스트 5를 통과하지 못했다. 마찬가지로 동명이인인 이름이 2가지가 이상 일때, 위의 sam과 john 같은 테스트 케이스를 걸러내지 못한다.
마지막
def solution(participant, completion):
hash_table = {}
sum_hash = 0
for p in participant:
hash_table[hash(p)] = p
sum_hash += hash(p)
for c in completion:
sum_hash -= hash(c)
return hash_table[sum_hash]
검색을 통해 hash()에 대해 알게 되었다. dictionary로 hash_table을 만들어 조회 시간을 줄이고 sum_hash를 활용해 유일한 입력값을 찾고자 했다. completion의 요소들을 hash로 변환해 sum_hash에서 모두 빼면 남은 hash값이 participant에 남아있는 요소이게 된다.