[프로그래머스 42576 파이썬] 완주하지 못한 선수 (level 1, 해시)

배코딩·2022년 2월 8일
0

PS(프로그래머스)

목록 보기
1/36

알고리즘 유형 : 해시(딕셔너리)
풀이 참고 없이 스스로 풀었나요? : O

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




SOLVE 1

딕셔너리 풀이

def solution(participant, completion):
    answer = ''

    result = {}

    for key in participant:
        if key not in result:
            result[key] = 1
        else:
            result[key] += 1

    for key in completion:
        result[key] -= 1

    for key in result:
        if result[key] >= 1:
            answer = key
            break

    return answer


SOLVE 2

Counter 모듈 풀이

from collections import Counter

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



SOLVE 1) 풀이 요약 (딕셔너리 풀이)

  1. participant로 딕셔너리를 만든다. key는 선수명, value는 동명이인 수를 의미한다.

  1. completion 원소들을 순회하면서, participant에 속한 키의 value를 1 차감한다.

  1. 이 후 완주하지 못한 선수의 value만이 1이 되고, 나머지는 다 0이 된다. 이 딕셔너리를 돌면서 value가 1 이상일 때의 key를 리턴해주면 끝


SOLVE 2 풀이 요약 (Counter 모듈 풀이)

  1. Counter 모듈로, 선수명 key, 동명이인 수 value인 Counter 객체를 participant, completion 각각에 대해 생성하고, 이를 차연산해준다. 그럼 차감 후 value가 0인 키는 모두 삭제되고, value가 1인 어떤 키 하나만 남게 된다. 이 것을 리턴해주면 된다.





배운 점, 어려웠던 점

  • 딕셔너리가 아닌 Counter 객체는 차연산을 지원하며, 이 때 각 객체의 키 값이 같은 것의 value에 대해 차연산을 수행하며, 0이 되는 경우에 key를 아예 삭제한다는 것을 알게 되었다.
profile
PS, 풀스택, 앱 개발, 각종 프로젝트 내용 정리 (https://github.com/minsu-cnu)

0개의 댓글