본문 바로가기

PS/프로그래머스

[프로그래머스-해시] 완주하지 못한 선수_파이썬

 

programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr


def solution(participant, completion):
    participant.sort()
    completion.sort()

    for i in range(len(completion)):
        a = participant.pop()
        b = completion.pop()
        if a != b:
            return a
    return participant[0]

해시 유형의 문제지만, 솔루션을 생각해 내지 못해 정렬을 이용해 풀었다.


from collections import Counter

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

온라인 코딩테스트에 가장 어울리는 풀이일 듯싶다.

Counter는 정말 유용하다..


def solution(participant, completion):
    dic = {}
    temp = 0
    
    for part in participant:
        dic[hash(part)] = part
        temp += hash(part)
    
    for com in completion:
        temp -= hash(com)
    
    return dic[temp]

문제의 취지에 가장 잘 맞는 풀이라고 생각한다.

딕셔너리를 활용해 key에 참가자 해쉬값, value에 참가자를 삽입하고 temp에 참가자들의 해쉬값을 전부 더해준다.

이제 temp에서 완주자들의 해쉬값을 빼주면 완주하지 못한 자의 hash값만 나오게 되는데, 이 값을 딕셔너리에 키로 넣어주면 정답이 도출된다.