CS/알고리즘

(알고리즘 공부) 완주하지 못한 선수

ri5 2021. 3. 12. 14:46

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

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

입력


                              

participant    completion
["leo", "kiki", "eden"] ["eden", "kiki"]
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"]
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"]

 

출력


return
"leo"
"vinko"
"mislav"

 

 

 

 

풀이


def solution(participant, completion):
    participant.sort()
    completion.sort()
    
    for p,c in zip(participant, completion):
        if p != c:
            return p
    answer = participant.pop()
    return answer

배열을 정리한 후 그배열을 zip 형태로 묶어 값이 같지 않을경우 p값을 리턴하고 모두 같으면 마지막값에 있다는 뜻으로pop을 사용해서 리턴한다.

 

 

다른사람 풀이


import collections


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

입력받은 배열을 cllections모듈의 Couter 메서드를 사용해 객체형태로 만들어 준다. 예) [{ "leo": 1 , "kiki" : 2}]

그래서 서로 컬렉션에서 겹치는 부분을 제거하여 answer 첫번째 값을 가져오면 됨