찔끔찔끔씩😎

[프로그래머스] 완주하지 못한 선수 - python (코딩테스트 고득점 - Kit 해시) 본문

Algorithm/프로그래머스

[프로그래머스] 완주하지 못한 선수 - python (코딩테스트 고득점 - Kit 해시)

댕경 2022. 9. 5. 18:30
728x90

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제

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

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


해결 1

처음에는 직접 참가자와 완주자를 비교하였다.

동명이인이 있을 수 있어 체크한 참가자는 지워나가는 방식으로 진행하였다.

 

근데 반복문으로 인해 효율성 문제가 발생하였다. 


코드 1

def solution(participant, completion):
    for part in participant:
        if part  in completion:
            completion.remove(part)
            continue
        return part

해결 2

참가자와 완주자를 이름순으로 정렬 시킨 뒤 zip 함수를 사용하였다.

zip함수는 for문을 사용할 때와는 달리 루프를 한번만 돌기 때문에 효율성 문제를 해결할 수 있다고 생각했다.

 

더보기

💡zip 함수란?

>>> list(zip([1, 2, 3], [4, 5, 6])) [(1, 4), (2, 5), (3, 6)]

>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9])) [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

>>> list(zip("abc", "def")) [('a', 'd'), ('b', 'e'), ('c', 'f')]

 


코드 2

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for p,c in zip(participant, completion):
        if p != c:
            return p
    return participant[-1]

 

 

Comments