count
를 이용해서 풀려고 했지만, 정확도가 100% 나오지 않아 완벽하게 풀지 못했다.
4가지 풀이 방법이 있다.
- Counter
- Hash
- range(len())
- zip()
첫번째로 Counter
모듈을 선언해서 풀 수 있는데, Counter
끼리는 더하거나 뺄 수 있다. 이번문제를 풀면서 처음 보는데 되게 유용한것 같다.
단 1줄로 답을 제출 할 수 있다 (WOW)
# Counter
from collections import Counter
def solution(participant, completion):
return str(*(Counter(participant) - Counter(completion)))
두번째로 Hash
값을 이용하자.
제한사항에 completion의 길이는 participant의 길이보다 1 작습니다.
처럼, 출력값이 무조건 1개가 나오기때문에 temp
에 hash
값을 누적해주고, participant hash
값을 빼주면 결과적으로 남는 hash
값에 키를 붙여주면 누군지 알 수 있다.
# Hash
def solution(participant, completion):
hash_dic = {}
temp = 0
for part in participant:
hash_dic[hash(part)] = part
temp += hash(part)
for com in completion:
temp -= hash(com)
return hash_dic[temp]
세번째와 네번째는 푸는 방법이 비슷한데, 정렬해서 index
를 하나씩 비교하다 서로 다른 값이면 출력, 끝까지 돌았는데도 다른 값을 찾지 못했다면 participant[-1]
을 출력하는 방법이다.
# range(len())
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(participant) -1):
if participant[i] != completion[i]:
return participant[i]
return participant[-1]