
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
| participant | completion | return |
|---|---|---|
| ["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
| ["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
| ["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
제일 처음 짠 코드는
def solution(participant, completion):
for i in completion:
if i in participant:
participant.remove(i)
else:
pass
return participant[0]
결국 2중for문을 도는거나 마찬가지라 O(n^2)정도... 효율이 후져서 틀렸다.
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[-1]
그래서 sort해서 풀었더니 통과됐다.
처음에 생각했던건 차집합으로 구하는 방식이었는데 set을 쓰면 중복이 제거돼서 실패했다. 미련이 남아서 더 찾아보니 Collections 모듈을 사용하면 된다고... 코드가 좀 더 pythonic해졌다
import collections
def solution(participant, completion):
answer = list(collections.Counter(participant) - collections.Counter(completion))[0]
return answer