https://school.programmers.co.kr/learn/courses/30/lessons/42576
두 배열이 주어질 때, 완주하지 못한 선수의 이름을 return 해라.
단, 동명이인이 존재할 수 있다.
ex) 두 명이 같은 이름인데, 완주자 명단에 한 명만 있으면 한 명은 완주를 하지 못한 것이다.
cf) completion 배열의 길이는 participant 보다 1 작다. 즉, 완주를 하지 못한 사람은 항상 1명이다.
def solution(participant, completion):
answer = ''
p = list(set(participant)) # 참가자 배열을 set 연산하여 배열 p에 저장 (동명 이인이 있을 수 있으므로 set 연산을 통해 중복되지 않은 이름만 저장)
hash = {}
for i in p: # hash를 만들어서 {"참가자 이름" : 0} 형태로 저장
hash[i] = 0
for i in participant: # 참가자의 수만큼 hash 값을 갱신(1씩 추가, 동명이인인 경우 해시 값이 2 이상으로 표기됨)
hash[i] += 1
for i in completion: # 완주한 참가자들의 해시 값을 1씩 감소시킴
hash[i] -= 1
for i in hash: # 최종적으로 해시 값이 1인 참가자를 return (완주 못한 참가자임)
if hash[i] == 1:
return i
딕셔너리를 조금 다른 방법으로 선언 후 value 값을 지정했다.
import collections
def solution(participant, completion):
hash = collections.defaultdict(int)
for p in participant:
hash[p] += 1
for c in completion:
hash[c] -= 1
for val in hash:
if hash[val] == 1:
return val
👏 해시 문제를 마스터하자!