본문 바로가기

개발/Python & Flask

[python] 코딩테스트 연습풀이 "완주하지 못한 선수"

언뜻보면 정말정말 간단한 줄 알고,
set - set 해서 하려 했으나(차집합),
동명이인을 해결하지 못했다.

 

이중포문을 쓰면 시간복잡도가 n^2이기 때문에,
시간이 초과됐다.

 

remove함수를 써도 시간이 초과됐다.

많은 방법으로 시도 했으나 효율성에서 0점을 맞았다.

 

한 40분정도 붙잡고 있었던거 같은데,
결국 아래와 같은 해답으로 해결!

 

def solution(participant, completion):
    answer = ''
    participant.sort()
    completion.sort()
    a = list(set(participant) - set(completion))

    #동명이인이 완주못한게 아니라면 set a에 한명이 남는다. 그 사람이 범인!
    if a:
        return list(a)[0]

    #동명이인이 완주못했다면, 1번의 for문으로 idx를 대조해가며 범인을 찾는다!
    for idx, value in enumerate(completion):
        if value != participant[idx]:
        answer = participant[idx]
        break

return answer

 

제일 간결하고 많은 좋아요를 받은 코드는 Collection.Counter를 썼더라.
공부를 좀 해봐야겠다.

반응형