0%

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

프로그래머스 - 연습 문제

Code (Python)

  • for문과 remove 함수로 풀면 시간 초과 보는 문제
  • for문은 O(n), remove 함수는 O(n)으로 도합 O(n^2)
  • 문제에 시간 제한이 안 나와있는데 O(n^2)면 시간 초과가 나니까 줄여야 함
  • 그래서 집합을 썼는데 푸는 내내 마음에 안 들었다
  • 문제 낸 의도가 이게 아닐 텐데..
1
2
3
4
5
6
7
8
9
10
11
12
def solution(participant, completion):
s1 = set(participant)
s2 = set(completion)

if s1 == s2:
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
else:
return list(s1 - s2)[0]

Code (Python)

  • collections 모듈의 counter 사용. 컨테이너에 동일한 자료가 몇 개인지 파악하는데 사용한다.
  • Counter 객체는 이렇게 뺄 수가 있다고 함. 아무튼 결과적으로 값이 1인 것들만 남는다.
1
2
3
4
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]

Code (Python)

  • 내가 구현하고 싶었던 형태
  • 그냥 for 문 밖에서 return하면 되는 거였구나 (멍청)
1
2
3
4
5
6
7
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant)-1]