import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
프로그래머스의 완주하지 못한 선수를 풀고 나서 다른 사람의 답안을 확인했다가 놀라운 코드를 발견했다. Counter라를 객체를 사용하여 세상 간단하게 풀었다. set은 차집합이 되는데 list는 그게 안돼서 불편했었는데 이 풀이는 그걸 실현했다. 다음에 이런 상황에 활용하기 위해 Counter 객체에 대해 공부해보자
Python 공식 문서에 따르면 Counter 객체는 해시 가능한 객체를 세기 위한 dict 서브 클래스이다. 즉, 요소가 key로 저장되고 개수가 value로 저장되는 일종의 딕셔너리이다.
>>> Counter('gallahad')
Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
>>> Counter(['eggs', 'ham'])
Counter({'eggs': 1, 'ham': 1})
Counter 객체를 생성하면 개수를 세기 쉽도록 하는 딕셔너리가 생성된다.
여기서 놀라운 점!
Counter 객체끼리 뺄셈이 가능하다.
>>> Counter('abcd') - Counter('abc')
Counter({'d': 1})
이를 활용하면 list의 뺄셈을 쉽게 구현할 수 있다.
Counter.elements()
를 이용하면 Counter 객체 내에 있는 요소들을 이터레이터로 반환해준다.Counter.most_common(n)
을 이용하면 가장 많은 요소 n가 (key, value) list 형태로 반환된다.