TIL.10 (코테)완주하지 못한 선수

Haiin·2020년 11월 2일
0

<완주하지 못한 선수 문제풀이 with python>


프로그래머스 문제 보기





문제풀이

def solution(participant, completion):
    answer = ''
    for i in participant :
        if i in completion :
            completion.remove(i)
        else :
            answer += i
    return answer

단순히 리스트에서 중복된 값을 빼주면서 남은값을 리턴해주는 방식으로 만들었다. 근데 값은 맞았지만 유효성검사에서 실패라고 하여 구글링을 하니 collections 라는 모듈을 쓰는 것을 추천했다.





다른사람 문제풀이 비교

import collections


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




collections모듈 - Counter

collections.Counter([iterable-or-mapping])

  • 딕셔너리 서브 클래스로 요소가 딕셔너리 키로 저장되고 개수가 값으로 저장된다.
  • 값은 0은 될 수 있으나 음수값은 갖지 않고 양수로 표현된다.
  • 리스트, 딕셔너리, 값=개수, 문자열을 입력받을 수 있다.
  • 메소드로 .update(), .elements(), most_common(n), subtract() 를 갖는다.
  • collections.Counter 을 이용하여 덧셈(+), 뺄셈(-), 합집합(|), 교집합(&)을 구할 수 있다.
    (값은 딕셔너리형태({값 : 개수} 로 반환 된다.)
# collections.Counter 뺄셈 예시

x = ['marina', 'josipa', 'nikola', 'vinko', 'filipa']	
y = ['josipa', 'filipa', 'marina', 'nikola']	

print(collections.Counter(x)) 
# Counter({'marina': 1, 'josipa': 1, 'nikola': 1, 'vinko': 1, 'filipa': 1})
print(collections.Counter(y))
# Counter({'marina': 1, 'josipa': 1, 'nikola': 1, 'filipa': 1})
print(collections.Counter(x) - collections.Counter(y))
# Counter({'vinko': 1})

a = collections.Counter(x) - collections.Counter(y)
print(list(a)) # list(a) = list(a.keys()) 결과값 같음
# ['vinko']
print(list(a)[0])
# vinko

0개의 댓글