[Py_Lv1] 완주하지 못한 선수

Sunghun📈·2021년 3월 21일
0

프로그래머스

목록 보기
9/93
post-thumbnail

- 문제 설명

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

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

- 제한 사항

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

- 입출력 예

- 접근법

적어도 하루에 1개의 알고리즘을 풀기위한 여정은 주말도 계속되고 있습니다.

이 문제는 if문에 not in을 이용해 쉽게 해결하는줄 알았으나 동명이인이 나타나
당황스러운 상황을 연출해주었습니다.

수 차례 도전으로 not in으로는 해결할 수 없는것으로 판단하여 list에 사용할 수
여러 함수들을 찾아보다가 zip이라는 함수를 알게되었습니다.

일단 두 리스트의 값을 인덱스를 기준으로 붙여주기 때문에 문제로 주어진 두 리스트에
적용해 보았습니다.

그리고 2가지 특징을 찾을 수 있었습니다.

한가지는 중간에 다른 값이 나오면 비교값인 i를 출력해주면 된다는 사실이고
두번째는 미 완주자의 이름이 끝에 나오는 경우 zip 함수의 특성상 짝이 없는 값은
버리기 때문에 i의 마지막 인덱스 값을 출력해주면 된다는 사실이었습니다.

다행이 아래와 같은 코드를 만들어 해결하였습니다.

오늘은 조금 일찍 잘 수 있을 것 같습니다. 🤣

=============================================================

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for i, j in zip(participant, completion):
        if i != j:
            return i
    return participant[-1]
profile
데이터 분석과 AI 분야의 전문가를 꿈꾸는 청년

0개의 댓글