programmers_문제4_완주못한선수
목표
: 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하기.
python 풀이 모음
# 풀이 1
import collections
def solution(participant, completion):
result = collections.Counter(participant) - collections.Counter(completion)
return list(result).pop()
# 풀이 2
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
list(result).pop()
list(answer.keys())[0]
둘다 리스트로 만들어서 가장 첫번째 값이 나옴.
완주하지 못한 선수가 1명일 경우라서, 값이 하나밖에 남기 때문. (문제에 조건있음)
Counter
이전 문제에서도 나왔던 collections 라이브러리의 Couner에 대해서 알아보기.
- 파이썬의 Counter 클래스는 iterable의 원소의 개수를 셀 때 편리하게 사용할 수 있는 기능
- 딕셔너리 객체와 유사함
- 소의 이름들은 딕셔너리 key로, 각 원소의 카운트는 딕셔너리의 value로 저장됨
- 객체끼리 더하기, 빼기가 가능함. 빼기 시 빈도수가 0 이하가 될 때는 해당 원소 자동으로 삭제, subtract() 메소드와 다른점.
- 교집합(&), 합집합(|) 연산 지원, 교집합은 겹치는 키의 경우 큰 값을 return 함.
- clear() : 카운터 객체에서 모든 key-value 쌍을 제거
- copy() : 카운터 객체의 복사본을 반환
- elements() : 카운터 숫자만큼 요소 반환
- 리스트를 가지고 카운터 객체를 만들었다면, 다시 리스트로 돌린다고 생각하면 쉽다. 물론 순서는 바뀐다. list(c2.elements())와 같이 사용.
- get() : 인자로 key를 입력하면 해당 key와 매칭되는 value를 반환
- items() : key, value 쌍을 튜플 형태로 반환
- keys() : 카운터 객체의 key들을 반환
- most_common() : 가장 빈도수가 높은 key, value 쌍부터 튜플 형태로 반환. 인자로 숫자(개수)를 전달하면 가장 빈도수가 높은 것부터 해당 개수만큼의 쌍만이 반환됨
- pop(), popitem()
- pop() : 인자로 key를 반드시 전달해야 하며, key와 매칭되는 value를 반환하고 해당 key, value 쌍을 카운터 객체에서 제거
- popitem() : 전달하는 인자가 없어야 하며, 가장 뒤의 key, value 쌍을 튜플 형태로 반환하고 해당 쌍을 카운터 객체에서 제거
- setdefault() : 카운터 객체에 key, value 쌍을 추가할 때 사용할 수 있음
- key만 전달하면 카운트 수는 디폴트로 None
- key와 함께 default=10과 같이 전달하면 key에 해당하는 카운트에 입력한 숫자가 반영됨
- subtract() : iterable을 전달하면 각 요소의 값을 각각 빼주고 그 결과의 카운트는 마이너스 값을 가질 수도 있음, 음수를 제거하기 위해서는 단순히 Counter 객체를 하나 만들어 더하면 삭제됨
- update() : iterable을 전달하여 같은 값이 있으면 카운트가 추가되게 하고 없으면 새로운 key, value 쌍을 생성, 딕셔너리의 update와 비슷하지만 문자열이나 리스트 형태로도 입력가능.
- values() : 카운터 객체의 value, 즉 카운트들을 반환
(출처 : 프로그래머스, 코딩테스트 연습 )
(출처 : https://ek-koh.github.io/python/counter/)
(출처 : https://hongl.tistory.com/35)