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

s2ul3·2022년 9월 23일
0

문제링크

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

문제설명

알고리즘

해시(Hash)를 사용하여 참가자들의 각 이름에 번호를 부여한다.
모든 참가자들의 이름과 번호를 매칭한 것들을 딕셔너리에 따로 모아둔다.
ex) d = {30 : 'leo', 62 : 'kiki', 5 : 'eden'}
각 참가자들의 hash값을 더해준 다음, 완주한 참가자들의 hash값을 빼주면 --> 완주 못한 참가자의 hash값이 나옴. 이 hash값을 딕셔너리에 대입하면 이 hash값을 지닌 참가자의 이름을 알 수 있고 이것을 return한다.

코드

def solution(participant, completion):
    hash_dict = dict()
    hash_sum = 0
    for part in participant:
        hash_dict[hash(part)] = part
        hash_sum += hash(part)
        
    for com in completion:
        hash_sum -= hash(com)
    return hash_dict[hash_sum]

다른방법

participant배열에서 각 이름이 나온 횟수를 담는 딕셔너리를 만든다.
ex) participant = ['leo', 'kiki', 'leo]
--> d = {'leo' : 2, 'kiki : 1}
딕셔너리 만드는 코드는 다음과 같다.

d = {}
for x in participant:
	d[x] = d.get(x,0) + 1

여기서 dict.get(x, 0)은 dict에 x key가 존재하면 x의 value를 불러오고, 만일 x key가 존재하지 않으면 0을 반환한다는 뜻.
딕셔너리를 만든 후 completion배열을 돌며 완주한 사람의 딕셔너리 값을 1 감소시킨다.

for x in completion:
	d[x] -= 1

그 후 딕셔너리에서 value값이 0보다 큰 값을 지닌 key값을 불러온다.
이때 key값이 완주하지 못한 선수이다.

dnf = [k for k, v in d.items() if v > 0]
answer = dnf[0]
return answer
profile
statistics & computer science

0개의 댓글