TIL 58 | 완주하지 못한 선수 python (프로그래머스)

Gom·2021년 4월 16일
0

Algorithm

목록 보기
30/48
post-thumbnail

문제 설명

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

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

제한사항

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

🔎 접근

1차 : for문을 돌리되 조건을 not in completion으로 하니 동명이인을 걸러낼 수 없었다.

2차 : participant.count()가 2이상인 경우와 그렇지 않은 경우를 나누어 계산하니 효율성 테스트를 통과하지 못했다.

3차 : 비교 시간을 줄이기 위해 정렬을 하고 두 배열의 차이가 1이라는 점에 착안 zip으로 동일한 인덱스를 비교하여 다른 부분이 있으면 해당 부분을 답으로 하고 매칭된 인덱스 값들이 전부 일치하면 남은 하나의 값인 participant의 마지막 값을 출력하였다.

✅ 정답코드

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for a,b in zip(participant,completion):
        if a != b:
            return a
    return participant.pop()
       

🏋️‍♂️ 내장함수없는 버전

for i in range(len(completion)):
   if completion[i] != participant[i]:
      return participant[i]

return participant[-1]

다른 이의 풀이로 알게 된 새로운 개념

[파이썬] collections 모듈의 Counter 클래스 사용법

profile
안 되는 이유보다 가능한 방법을 찾을래요

0개의 댓글