oohyoo 님의 블로그

[Python] 프로그래머스 - 완주하지 못한 선수 본문

코딩테스트

[Python] 프로그래머스 - 완주하지 못한 선수

oohyoo 2025. 1. 16. 15:01

[문제]

 

[잘못된 풀이 - 집합 이용]

 

def solution(participant, completion):
    p = set(participant)
    c = set(completion)
    
    answer = list(p - c)[0]
    
    return answer

 

동명이인이 있을 수 있다는 조건을 읽지 못하고 단순하게 집합으로 처리해버렸다.

 

 

[풀이 - 딕셔너리만 이용]

def solution(participant, completion):
    answer = ''
    temp = {}

    for person in participant:
        if person in temp:
            temp[person] += 1
        else:
            temp[person] = 1

    for person in completion:
        if person in temp:
            temp[person] -= 1
            
    for person, count in temp.items():
        if count == 1:
            answer = person
            break

    return answer

 

[풀이 - 딕셔너리 + Hash]

def solution(participant, completion):
    answer = ''
    temp={} 
    answer_Hashkey=0
    
    for i in participant:
        temp[hash(i)]=i 
        answer_Hashkey+=hash(i) 
        
    for j in completion:
        answer_Hashkey-=hash(j) 
    answer += temp[answer_Hashkey]
    
    return answer

 

이 풀이는 'Hash'를 사용하여 좀 더 간단한 코드를 작성하였다. 처음에 작성한 잘못된 풀이(set을 이용)와 다르게 hash값을 이용하였기 때문에 이름이 같은 선수도 hash 키값이 다르기 때문에 분류된다.

만약 문제에서 완주하지 못한 선수가 여러명이라고 한다면, 딕셔너리에서 추가/삭제 과정으로 통해 구해야 될 것 같다.

 

'Hash'에 대해서 새로 알게 되었다. Hash 함수는 랜덤한 매개변수를 생성해주는 것으로 이해하였다. 딕셔너리의 키값으로 주로 이용하게 되는데, 랜덤한 수가 생성되기 때문에 보안분야에서 자주 쓰인다고 한다.

 

 

[참고한 글]

"해시(Hash)란 무엇인가(feat. Dictionary 자료구조)"

https://amazelimi.tistory.com/entry/Python-%ED%95%B4%EC%8B%9CHash%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80feat-Dictionary-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

반응형