Python/알고리즘문제
[프로그래머스][해시] 완주하지 못한 선수
붕어사랑 티스토리
2021. 3. 12. 11:00
반응형
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()
반응형