문제


[문제 설명]


수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.


마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.


[제한 사항]


  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.


[입출력 예]


participant 

completion 

return 

["leo", "kiki", "eden"]

["eden", "kiki"] 

"leo" 

["marina", "josipa", "nikola", "vinko", "filipa"]

["josipa", "filipa", "marina", "nikola"] 

"vinko" 

["mislav", "stanko", "mislav", "ana"]

["stanko", "ana", "mislav"] 

"mislav" 



[입출력 예 설명]


예제 #1

leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.


예제 #2

vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.


예제 #3

mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.


풀이


1
2
3
4
5
6
7
import collections
 
def solution(participant, completion):
    answer = ''
    answer = collections.Counter(participant) - collections.Counter(completion)
    answer = list(answer.keys())[0]
    return answer
cs

  • participant 에서 나온 명단과 completion  에서 나온 명단을 비교한다.
  • collection 모듈의 Counter 은 입력값에 대해 중복 여부를 체크하여 {"입력값" : 중복 횟수}를 리턴한다.
  • collection 모듈의 Counter 은 각 요소끼리 뺄 수 있다.
  • 뺀 후에 남은 값을 list 로 가져와 key 값을 출력한다. (이 때 0번째인 이유는 우선, completion의 길이가 participant 길이보다 1이 작기에 가능한 것이다.)






출처 : https://programmers.co.kr/learn/courses/30/lessons/42576

'코딩테스트 연습 > Python' 카테고리의 다른 글

[leve1] 자릿수 더하기  (0) 2017.12.01
[leve1] x 만큼 간격이 있는 n개의 숫자  (0) 2017.11.30
[leve1] 딕셔너리 정렬  (0) 2017.11.30

+ Recent posts