Today.dev

[PG_42576/Python] 완주하지 못한 선수 본문

알고리즘/프로그래머스

[PG_42576/Python] 완주하지 못한 선수

otu165 2021. 6. 22. 20:57

문제

42576번: 완주하지 못한 선수

 

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

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 


풀이

participant, completion 배열을 정렬하고 두 배열의 값이 어긋나는 순간에서 정답을 찾는다.

예를 들어 participant = [1, 2, 3, 3, 5], completion = [1, 2, 3, 5] 인 경우를 보자.

1 2 3 3 5
1 2 3 5  

(1, 1), (2, 2), (3, 3)과 같이 계속 값이 일치하다 (3, 5) 처럼 값이 어긋나게 되면 그때의 participant 값이 정답이다.

 

하지만 예외 케이스도 있다. participant = [1, 2, 3, 3, 5], completion = [1, 2, 3, 3] 을 보자.

1 2 3 3 5
1 2 3 3  

반복문이 종료될 때까지 어긋난 순간이 발견되지 않는다. 그때는 participant 의 가장 마지막 값이 정답이므로 그것을 return 해준다.

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]

 

 

개선한 풀이

collections 모듈의 Counter 클래스를 이용

딕셔너리 자료구조를 확장하는 Counter 클래스는 원소의 개수를 셀 때 유용하게 사용할 수 있다. 또한 원래 딕셔너리 자료형은 집합 연산이 불가능하지만 Counter 클래스는 집합 연산이 가능하다. 

from collections import Counter

def solution(participant, completion):
    answer = Counter(participant) - Counter(completion)
    return ''.join(answer)

 


풀이 참고

프로그래머스-다른 사람의 풀이

 

Comments