프로그래머스 문제중 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
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을 이용한 경우 별에 별 기묘한 방법이 많지만... 여기까지..
'코딩테스트 공부 > 프로그래머스 문제' 카테고리의 다른 글
프로그래머스 DP_정수 삼각형 (0) | 2020.08.13 |
---|---|
프로그래머스_해시_전화번호 목록 (0) | 2020.06.03 |
프로그래머스_스택_탑 (0) | 2020.05.26 |
프로그래머스_완전탐색_모의고사 (0) | 2020.05.04 |
2019 카카오 겨울 인턴쉽_크레인 인형뽑기 게임 (0) | 2020.05.04 |