본문 바로가기
코딩테스트/프로그래머스 lv 1

완주하지 못한 선수

by 잼있는잼니 2023. 1. 20.

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 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"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.


맨 처음 풀이

def solution(participant, completion):
    
    for i in completion:
        if i in participant:
            participant.remove(i)
            
    return participant[0]

 

나의 풀이

from collections import Counter

def solution(participant, completion):
    
    cp = Counter(participant)
    cc = Counter(completion)
    answer = list(cp - cc)
    return answer[0]

 

  • 우선, 제한 사항에서 completion의 길이가 무조건 participant보다 1 작은 것을 확인해야 한다.
  • 그리고 최대 participant는 100000명이 될 수 있음을 알아야 한다.
  • 생각의 흐름대로 맨 처음 푼 풀이는 정말 효율성 따위는 생각도 안 한 코드였다.
  • 간단히 설명하자면, completion에 있는 이름을 participant에서 삭제를 하고 반환한 코드였다.
  • 효율성 runtime 에러가 나와 다른 방법을 강구했고, Counter라는 친구를 이용하면 +, - 연산까지 가능한 친구였다.
  • Counter를 각 리스트에 적용해주고, 참가자 - 완주자를 시켜 리스트로 바꾼다음 반환하기로 구했다.

 


 

'코딩테스트 > 프로그래머스 lv 1' 카테고리의 다른 글

[Python]기사단원의 무기  (0) 2023.03.31
과일 장수  (0) 2023.01.17

댓글