반응형
programmers.co.kr/learn/courses/30/lessons/42576
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()
반응형
'Python > 알고리즘문제' 카테고리의 다른 글
[프로그래머스][해시] 전화번호 목록 (0) | 2021.03.12 |
---|---|
[프로그래머스][스택/큐] 다리를 지나는 트럭 (0) | 2021.03.12 |
[백준 1463] 1로 만들기 (0) | 2021.03.11 |
[백준 2606] 바이러스 (0) | 2021.03.11 |
[백준 2805] 나무자르기 (0) | 2021.03.11 |
댓글