[프로그래머스] 완주하지 못한 선수 (python)
본문 바로가기
Algorithm/Python, C++

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

by liveloper jay 2022. 8. 9.

문제

 

풀이

이 문제를 정리하면 다음과 같습니다.
1. 참가자(participant), 완주자(completion) 2개의 리스트가 존재
2. completion의 크기는 participant의 크기보다 1 작음.
3. 완주하지 못한 사람 1명의 이름을 return

저는 위의 조건을 보고 단순히 participant와 completion을 직접 비교 후 같은 값이 존재하면 리스트의 값을 삭제한 후 마지막에 남는 값을 출력하면 되는 간단한 문제라고 생각했습니다. 그래서 아래 코드와 같은 방식으로 풀이를 진행했습니다.

def solution(participant, completion):
    answer = ''
    
    for i in completion:
        for j in participant:
            if (i == j):
                participant.remove(i)
                break
    
    answer = participant[0]
    return answer

이렇게 풀이를 하니 테스트 케이스는 모두 통과하였으나 효율성 테스트에서 모두 시간 초과가 되어버렸습니다. 그래서 다른 방법으로 풀이를 진행해야 할 것 같아 다른 풀이를 참고해보니 리스트 내의 n번째 값을 직접 비교해서 푸는 방법이 있다는 것을 알게되었습니다. 제가 이해한 방식은 다음과 같았습니다.

1. 각 리스트를 정렬한다.
2. 정렬을 하게되면 completion에 존재하지 않는 이름이 나오기 전까지는 participant와 completion의 n번째 값은 같다.
3. participant[n] 과 completion[n]을 비교한 후, 값이 다르면 바로 participant[n]을 리턴, 마지막까지 모두 비교하였을때 다른 값이 없으면 participant의 마지막 값을 리턴

def solution(participant, completion):
    participant.sort()
    completion.sort()
    
    for i in range(len(completion)):
        if(completion[i] != participant[i]):
            return participant[i]
    
    return participant[len(participant)-1]
    
}


위의 방식으로 풀이를 진행하니 정확성과 효율성 테스트 모두 통과하는 코드를 작성할 수 있었습니다.

댓글