def solution(participant, completion):
# 1. 리스트 정렬
participant.sort()
completion.sort()
# 2. 없는 사람 찾기
for i in range(len(participant) - 1):
if participant[i] != completion[i]:
return participant[i]
# 예외처리 - 완주하지 못한 선수가 맨 마지막에 있는 경우
return participant[len(participant) - 1]
완주하지 못한 선수가 Participant 배열의 마지막 index에 있는 경우 따로 처리가 필요함에 주의.
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
-
가 불가능하지만 Counter객체는 -
연산이 가능하다. 파이썬의 내장 함수 hash()
는 객체의 해시 값을 반환하는 함수이다.
hash()
함수는 같은 객체에 대해 항상 같은 해시 값을 반환한다.
participant
의 hash값의 합 구하기completion
의 hash값 빼기무조건 한명만이 완주하지 못한다고 했으므로, 빼고 남은 값이 미완주자의 해시값이다.
def solution(participant, completion):
sum = 0
dic = {}
# 1. 딕셔너리 만들기 / 2. hash값의 합 sum 구하기
for part in participant:
dic[hash(part)] = part
sum += int(hash(part))
# 3. completion의 sum(hash) 빼기
for comp in completion:
sum -= hash(comp)
return dic[sum]
hash문제였던만큼 hash로 푸는 것이 출제의도였던것 같다. hash()를 처음 사용해보았는데 hash값의 합과 빼기 연산을 통해 값을 구할 수 있다는 것이 인상적이었다.