수많은 마라톤 선수들이 마라톤에 참여했습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주했습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
list를 사용해 풀 수도 있겠지만 list의 경우 검색의 시간 복잡도가 O(n)인데 반해 dict는 O(1)이다. 따라서 list보다 dictionary를 사용하여 문제를 푸는 것이 더 짧다는 생각을 갖고 문제를 풀어보자.
dictionary를 사용하여 푸는 방법은 다음과 같다.
for문으로 participant을 하나 씩 방문한다.
hash() 함수를 사용해 참가자 이름을 고유한 숫자로 만들고 그것을 key값으로 갖고 이름을 value로 갖도록 dictionary에 추가한다.
key를 hash_sum에 합한다.
for문으로 completion을 하나 씩 방문한다.
hash() 함수를 사용해 완주자 이름을 고유한 숫자로 만들고 hash_sum 변수에서 해당 숫자를 뺀다.
hash_sum 변수를 key로 dictionary를 조회한다.
파이썬으로 작성
def solution(participant, completion):
hash_sum = 0
hash_dict = {}
for p in participant:
hash_dict[hash(p)] = p
hash_sum += hash(p)
for c in completion:
hash_sum -= hash(c)
return hash_dict[hash_sum]
'알고리즘, 자료구조' 카테고리의 다른 글
시간복잡도 표현 ( 점근 표기법 ) (0) | 2022.07.15 |
---|---|
해시 (0) | 2022.07.06 |
ArrayList,LinkedList 비교 (0) | 2022.07.01 |
기능 개발 (0) | 2022.07.01 |
124 나라의 숫자 (0) | 2022.06.25 |