반응형
풀이
1차 시도 (실패)
문제를 보고 효율성이 있는 문제라 고민을 많이 했다...
정렬을 한 뒤 이분 탐색으로
조건을 참가자 인덱스 != 완주자 인덱스 and 참가자 인덱스-1 == 완주자 인덱스-1
주면 될 줄 알았는데
효율성에서 빵점....
뭐지...?
def solution(participant, completion):
answer=''
participant.sort()
completion.sort()
s,e=0,len(completion)-1
i = 1
queue=deque()
queue.append((s,e,i))
while queue:
s,e,i=queue.popleft()
m = (s + e) // 2
i += 1
if participant[m] != completion[m] and participant[m-1]==completion[m-1]:
answer=participant[m]
break
elif s==e:
break
else:
queue.append((m+1,e,i))
queue.append((s,m-1,i))
if answer=='':
answer=participant[-1]
print(answer)
2차 시도
그냥 정렬시킨 뒤
참가자 인덱스 != 완주자 인덱스 return
안되면 참가자[-1]시켜줬더니
성공했다.. 단순하게 해야하나...
def solution(participant, completion):
answer=''
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i]!=completion[i]:
return participant[i]
return(participant[-1])
참고 답안
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
counter 함수를 사용... (전에 본 적이 있는데 써본 적이 없다...)
counter 함수란 리스트의 요소 개수를 Dictionary형태로 반환하여 준다.
ex)
lst= ['a', 'b', 'c']
print(collections.Counter(lst))
------------------------------------------
결과
Counter({'a': 1, 'b': 1, 'c': 1})
counter로 요소의 개수를 세주고
참가자-완주자 하게되면 완주하지 못한 선수 한명만 남게되므로
형변환 시켜준 뒤 return
counter 사용법 외우기!!!
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Python/파이썬 프로그래머스] 키패드 누르기 (0) | 2021.05.04 |
---|---|
[Python/파이썬 프로그래머스] 호텔 방 배정 (0) | 2021.05.04 |
[Python/파이썬 프로그래머스] 불량 사용자 (0) | 2021.04.29 |
[Python/파이썬 프로그래머스] 튜플 (0) | 2021.04.29 |
[Python/파이썬 11057 백준] 오르막 수 (다이나믹 프로그래밍) (0) | 2021.04.16 |