https://programmers.co.kr/learn/courses/30/lessons/42576
동명이인이 있을 수 있기 때문에 중복을 허용하지 않는 set자료형을 이용해 단순 차집합을 구해주는 방법은 오답이다.
기본적인 논리는 다음과 같다. (시간초과)
for i in completion:
if i in participant:
participant.remove(i) #i와 같은 첫 번째 요소 제거
파이썬에서는 counter라는 클래스가 있다.
공식문서: https://docs.python.org/3/library/collections.html#collections.Counter
이는 리스트나 셋을 인자로 받으면 각 항목 별로 키를 만들어 개수를 값으로 가지는 딕셔너리를 반환해준다.
ex)
Counter('abbccc')
->Counter({'c':3, 'b':2, 'a':1})
Counter클래스는 서로 더하기, 빼기, 교집합, 합집합 등의 연산이 가능하다.
예제3을 살펴보면 다음과 같다.
Counter({'mislav': 2, 'stanko': 1, 'ana': 1})
Counter({'mislav': 1, 'stanko': 1, 'ana': 1})
여기서 차집합을 진행하게 되면 완주하지 못한 선수의 이름들이 나오게 된다.
def solution(participant, completion):
from collections import Counter
result=list(Counter(participant)-Counter(completion))
for i in result:
return i