IT/프로그래머스

[프로그래머스] 해시 > 완주하지 못한 선수

ziasu 2021. 10. 14. 21:56
반응형

1. 생각 정리

  • 완주를 못한 사람은 무조건 한 명 존재
  • participant 리스트의 길이 = completion 리스트의 길이 +1

 

2. 성공 코드(리스트 sort를 통한 방법)

  • 일단 participant, completion 리스트를 정렬한 뒤 쭉 비교
  • 비교하다 같은 인덱스에 있는 값이 다르면 return participant [i]
def solution(participant, completion):
    participant.sort()
    completion.sort()
    
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]
        
    return participant[-1] #무조건 완주 못한 사람은 한명 있고, participant의 길이가 completion의 길이보다 1 크기 때문

 

3. 성공 코드(해시값을 활용)

  • 다른 분들의 풀이를 보다 제가 생각지도 못한 방법이라 정리
  • participant 정보를 딕셔너리에 (hash(participant) : participant) 느낌으로 넣어두며 hashval에 모든 해시값의 합을 저장
  • completion 리스트를 한 바퀴 돌며 hashval에 모든 completion 요소들에 대한 해시값을 하나씩 빼주면
  • 결국 completion에 없는 participant 요소에 대한 해시값만 남게 됨
#completion의 길이는 participant의 길이보다 1 작습니다.
#participant의 모든 해시값의 합 - completion의 모든 해시값의 합 = 완주하지 못한 사람의 해시값
import collections

def solution(participant, completion):
    
    d = dict()
    hashval = 0
    
    for p in participant:
        d[hash(p)] = p
        hashval += hash(p)
        
    for c in completion:
        hashval -= hash(c)
        
    return d[hashval]
반응형