최대 1 분 소요

https://school.programmers.co.kr/learn/courses/30/lessons/42576

내 풀이.

def solution(participant, completion):
    hashDict = {}
    sumHash = 0
    
    for part in participant :
        hashDict[hash(part)] = part
        sumHash += hash(part)
        
    for comp in completion :
        sumHash -= hash(comp)
    
    return hashDict[sumHash]

예를들어,

participant = [‘a’, ‘b’, ‘c’]

completion = [‘a’, ‘b’]

라고 가정하면,

hashDict = {100 : ‘a’, 200 : ‘b’, 300 : ‘c’}로 임의의 key값이 매핑됐다고 하자.

그러면 sumHash = 600이 되고,

sumHash에서 completion 원소의 key값을 뺀다면, 한명의 완주하지 못한 선수의 해쉬값이 나온다. 이 key값의 value가 바로 완주하지 못한 선수이다.

sumHash = 600 - hash(‘a’) - hash(‘b’) = 300

따라서 완주하지 못한 선수는 C이다.

다른 사람의 풀이

import collections

def solution(participant, completion) :
    answer = collections.Counter(participant) - collections.Counter(completion)
    
    return list(answer.keys())[0]

프로그래머스 사이트에서는 해시문제로 분류돼있긴 하지만, 실제 코딩테스트에서는 이런 문제 분류가 없으므로 자유롭게 풀 수 있겠다.

댓글남기기