스터디/코딩테스트

python 코딩테스트 - 완주하지 못한 선수

공대생철이 2023. 11. 5. 22:54
728x90

출처 : 프로그래머스

처음 든 생각

- 두 개의 리스트를 비교해가면서 있는지 없는지를 확인하면 되겠다.

- 동명이인이 있을 수도 있다고 하네 그러면 동명이인의 수도 체크를 해서 진행해야 될까?

 

나의 답

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for i in range(len(completion)):
        a = participant.pop()
        b = completion.pop()
        if a != b :
            return a
        else:
            continue
    return participant.pop()

동명이인에 대한 부분을 어떻게 처리해줘야할지 살짝 고민했지만 리스트의 정렬로 해결할 수 있었다.

 

완주한 선수들의 리스트를 반복문으로 돌면서 하나씩 pop을 시켜준 뒤 비교해서 만약 같다면 그 선수는 완주한 것이다. 그러니깐 다른 경우일때만 처리를 해주면 되고 바로 return을 해준다. 왜냐하면 완주하지 못한 선수는 1명이기 때문에 차이나는 1명만 찾으면 그 뒤에는 굳이 코드가 동작할 필요가 없다.

 

만약 그렇게 한명씩 비교를 해주다가 completion 리스트가 비게 되면 participant는 한 명만 남을 것이다. 그럼 그 놈이 완주하지 못한 놈이 된다.

 

리스트에서 pop의 시간 복잡도는 상수이기 때문에 pop으로 소요시간을 줄이려 했다.

 

고려해야할 변수가 많은 문제는 아니여서 어렵지 않게 해결할 수 있었다.

728x90