ProblemSolving/Hash

프로그래머스 완주하지 못한 선수 (파이썬)

OSNIM 2022. 5. 3. 16:30
반응형

Level 1 해시 

 

문제 : https://programmers.co.kr/learn/courses/30/lessons/42576

 

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

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

programmers.co.kr

시행착오

첫번째 코드는 동명이인을 해결하지 못했습니다.

그래서 딕셔너리와 count를 이용했으나 테스트 케이스는 맞았지만 효율성 문제에서 틀렸습니다. 

따로 남겨놓지 못해서 코드가 없습니다. 

정답 코드

정렬해서 이름이 다른 것이 나오면 바로 출력하게 만들었습니다.

1명만 완주를 못했으니까 정렬로 빠르게 해결이 가능했던 것 같습니다.

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

 

좋아요를 가장 많이 받은 코드

import collections

def solution(participant, completion):
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]

파이썬 라이브러리의 강력함을 알 수 있는 코드입니다. 가장 좋아요가 많은 코드로 collections의 Counter() 객체를 이용하여 객체 내부 원소의 차이를 출력하는 방법입니다. 

 

내 코드 vs 최적화 코드

왼쪽이 제 코드, 오른쪽이 최적화 코드인데 정렬하여 푼 방법이 더 깔끔한 것을 알 수 있었습니다. 하지만 위 문제는 해쉬 문제로 오른쪽이 더 문제의 의도대로 푼 것이라고 할 수 있을 것 같습니다.

반응형