티스토리 뷰
문제
마라톤에 참가한 선수의 이름이 담긴 배열 : participant
마라톤에 완주한 선수의 이름이 담긴 배열 : completion 을 입력 값으로 받아
완주하지 못한 선수의 이름을 Return하는 Solution 함수를 생성하기
제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
풀이
def solution(participant, completion):
from collections import Counter
answer = Counter(list(participant))-Counter(list(completion))
return list(answer)[0]
NOTE
별다른 library를 import 하지 않고, 해결하려고 했으나 실패했다..
1. 참가자 중에서 완주자를 remove : 동명이인이 있을 경우는 불가능
2. 두 배열에 sort를 이용해서 비교 : 시간초과
어쩔 수 없이 collections.Counter() 모듈을 이용하여 문제를 해결했다.
Counter 모듈은 리스트 안의 원소의 개수를 체크해서 Dictionary로 반환합니다. 여기서 뺄셈 연산을 할 수 있는데 음수 값은 출력하지 않습니다.
from collections import Counter
Counter(['a','b','c','d','a'])
# Counter({'a': 2, 'b': 1, 'c': 1, 'd': 1})
list((Counter(['a','b','c','d','a']) - Counter(['a','b','c','d'])))[0]
# 'a'
위처럼 뺄셈 연산의 결과 값을 리스트로 바꾸게 되면 키 값이 출력됩니다.
@ 문제 출처 : https://programmers.co.kr/learn/courses/30/parts/12077
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
프로그래머스: #스택, 탑 (0) | 2020.01.08 |
---|---|
프로그래머스: #해시, 위장 (0) | 2020.01.07 |
프로그래머스: #해시, 전화번호 목록 (0) | 2020.01.06 |
댓글