/////
Search
Duplicate

완주하지 못한 선수

태그
해시
비고
체크 필요

문제

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항

마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예시

정답

solution 1. 정렬 후 1대1 대응

def solution(participant, completion): # 정렬 participant.sort() completion.sort() # 앞에서부터 1대1로 대응하고 일치하지 않는 것이 나오면 그것이 정답 for i in range(len(completion)): if participant[i] != completion[i]: return participant[i] return participant[-1] # completion의 개수만큼 대비했는데 정답이 나오지 않았다면 participant의 맨 마지막 선수가 정답
Python
복사

solution 2. 해시 이용

def solution(participant, completion): hash_dict = {} sum_hash = 0 for p in participant: sum_hash += hash(p) # 각 선수들의 해시값 더하기 if hash(p) not in hash_dict: # 해시 dictionary 만들기 / key = 선수의 해시값, value = 선수 hash_dict[hash(p)] = p for c in completion: sum_hash -= hash(c) # 완주한 선수들의 해시값 제외 # 결과적으로 남은 해시값 = 완주하지 못한 선수의 해시값 answer = hash_dict[sum_hash] return answer
Python
복사

solution 3. collections.Counter 이용

from collections import Counter def solution(participant, completion): # Counter dictionary 만들기 / key = 선수명, value = 나온 횟수 answer_dict = Counter(participant) - Counter(completion) # Counter는 빼기를 지원함. answer = list(answer_dict.keys())[0] return answer
Python
복사