코딩테스트 공부/프로그래머스 문제

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

Stat_in_KNU 2020. 5. 29. 15:13

프로그래머스 문제중 level 1에 해당하는 쉬운 문제지만

'해시'라는 key-value쌍을 가지는 자료구조를 잘 이해할 필요가 있다.

 

문제

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

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

나의 풀이

def solution(participant, completion):
    participant.sort()
    completion.sort()
    
    for c in completion:
        participant.remove(c)
    return participant[0]

[다시보니까 이 코드는 정답은 나왔지만 시간 초과가 떴다.]

아주아주 일반적인 풀이다.

이미 리스트를 활용하는데에 너무 적응되서 그런지 파이썬의 hash를 다루는 자료형인 dictionary를 잘 활용하지 못했다.

이렇게 푸는것도 나쁘지 않은 것 같지만 hash를 이용한 다른 사람들의 풀이도 살펴보자.

 

풀이 1 

from collections import Counter

이용

Counter는 각 객체와 객체의 카운트에 대해 key-value쌍을 가지는 딕셔너리 형태의 자료를 반환해주는 파이썬

내장 모듈의 함수다.

 

fromo collections import Counter
def solution(participant, completion):
    fail = Counter(participant) - Counter(completion)
    return [i for i in fail.keys()][0]

Counter는 다양한 attribute 및 연산을 지원하는데 이는 전에 썼던 글을 참고하자.

 

https://statinknu.tistory.com/4

 

프로그래머스 해시_위장 (Counter, reduce)

위장 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바��

statinknu.tistory.com

Update, elements, most_common(n), substarct()

+ - & | 등...

 

이 참에 코딩테스트에 유용한 파이썬 내장 함수들을 한번에 정리해볼까,,

 

풀이2

진짜! hash 함수 사용하기

 

파이썬의 내장 함수 hash는 각 값마다 고유한 value를 반환해준다.

 

이를 활용해 연산해준다... 고유한 값이기때문에 가감한 값도(거의?) 고유함.

 

def solution(participant, completion):

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

    answer = dic[temp]

    return answer

 

그 외에 zip을 이용한 경우, set을 이용한 경우 별에 별 기묘한 방법이 많지만... 여기까지..