티스토리 뷰

문제


마라톤에 참가한 선수의 이름이 담긴 배열 : 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


 

댓글
링크
최근에 올라온 글
Total
Today
Yesterday