본문 바로가기
프로그래머스/Lv.1

[Python] 완주하지 못한 선수

by MINU.SHINNNN 2024. 7. 21.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

완주하지 못한 선수를 찾아내는 문제로, 해시를 사용해 문제를 해결할 수 있습니다. 

먼저 dict[key] 의 value가 없는 경우 0으로 가져오며, 이 때 value를 1로 초기화 해줍니다. 값이 존재하는 경우 기존의 dict[name]의 값을 하나씩 늘려줍니다. 

 

다음으로 completion을 돌며 dict의 value를 하나씩 빼주고 value가 0이 아닌 key를 리턴해주면 답을 구할 수 있습니다. 

 

collections.Counter를 사용하면 위의 작업을 간단히 수행할 수 있습니다. Counter 객체의 key값을 list에 담고 첫번째 값을 출력해주면 동일한 답을 구할 수 있습니다.

import collections

def solution(participant, completion):
    answer = ''
#     dict = {}
#     for name in participant:
#         if not dict.get(name, 0):
#             dict[name] = 1
#         else:
#             dict[name]+=1
    
#     for name in completion:
#         dict[name]-=1
    
#     for key, value in dict.items():
#         if value:
#             return key
    
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]

 

아래는 hash 함수를 사용해 participant를 고윳값으로 변환하고 다시 빼주는 작업을 통해 최종적으로 남은 dic[hash]의 값을 가져옵니다

answer = ''
    temp = 0
    dic = {}
    for part in participant:
        dic[hash(part)] = part
        temp += int(hash(part))
    for com in completion:
        temp -= hash(com)
    answer = dic[temp]

    return answer