본문 바로가기
Python/알고리즘문제

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

by 붕어사랑 티스토리 2021. 3. 12.
반응형

programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

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

programmers.co.kr

c++스타일로 풀어봤다.

 

completion 배열을 dictionary로 만들어준다. value값을 기본적으로 1로 주고 동명이인이 있는경우 value에 1을 더해주어 몇명이 있는지 세어준다.

 

이후 participant를 확인하면서 이름이 존재 할 때 마다 value값을 -1씩 해준다.

value가 0이거나 dictionary에 없는경우가 답이므로 해당값 리턴해준다.

 

 

다른사람들 풀이보니 sort해서 포문 한방에 구하거나 counter 써서 한줄에 구해버리더라...

 

def solution(participant, completion):
    mydict = {}
    len_c = len(completion)
    for i in range(len_c):
        if completion[i] not in mydict:
            mydict[completion[i]] = 1
        else:
            mydict[completion[i]] = 1 + mydict[completion[i]]
            
    for i in participant:
        check = mydict.get(i)
        if check is None:
            answer = i;
            break
        elif check == 0:
            answer = i
            break
        else:
            mydict[i] = check -1
            
    
    return answer

 

 

 

 

Counter를 이용한 풀이. 완주못한 사람은 한명뿐이니 Counter의 차집합을 구하면 누가 완주못했는지 바로 나온다.

from collections import Counter
def solution(participant, completion):
    myCounter = Counter(participant) - Counter(completion)
    answer = list(myCounter.keys())[0]
    return answer

 

 

 

 

sort를 이용한 풀이. 정렬을 해놓고 둘이 비교하여 다른 요소가 발견되면 즉시 리턴해준다.

만약에 for문에서 걸러지지 못하면 마지막 요소가 답이므로 마지막 요소를 리턴해준다.

def solution(participant, completion):
    participant.sort()
    completion.sort()
    len_c = len(completion)
    for i in range(len_c):
        if participant[i]!=completion[i]:
            return participant[i]
    return participant.pop()
반응형

댓글