본문 바로가기

Development/CodingTest

[Hash] 프로그래머스 level 1 완주하지 못한 선수 python 풀이

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근

 

Participant, completion을 HashMap 자료구조로 변환 후 '-' 연산을 하는 방식을 떠올렸으나.

적당한 key나 value 값을 못 골랐다. 찾아보다가 Counter를 사용하면 목적에 위 방식에 딱 맞는 자료구조로 변환이 가능해서 간단하게 구현이 가능하였다.

Counter

Python의 collections 라이브러리에는 데이터 컬렉션과 관련된 다양한 유용한 클래스와 함수가 포함되어 있다. 그중에서

Counter 클래스는 어떤 데이터 집합(주로 리스트나 문자열)에 있는 요소의 개수를 세는 데 사용된다.

from collections import Counter

my_list = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
counter = Counter(my_list)

print(counter)
# Counter({4: 4, 3: 3, 2: 2, 1: 1})


Counter 객체를 생성할 때, 주어진 데이터 집합의 요소들을 세어서 각 요소의 개수를 딕셔너리 형태로 저장한다. 이후에는 해당 요소의 개수를 조회하거나, 요소를 추가하거나 뺄 수 있다. 

코드

import collections
def solution(participant, completion):
    pants = collections.Counter(participant)
    comples = collections.Counter(completion)
    return list(pants - comples)[0]

 

return 문에서는 list로 바꿔주면 key 값만 나열 되는데, 맨 첫 번째 인덱스 값만 출력하면 (완주하지 못한 사람이 항상 1명이므로) 되므로 [0] 번째 인덱스 값을 리턴하도록 했다.