본문 바로가기
  • The future is ours
코딩(파이썬)_프로그래머스

프로그래머스 코딩테스트 연습 완주하지 못한 선수(Python)

by scarlet bloom flowers once more 2022. 5. 5.
반응형

이 문제에서 요구하는 것은 참가자들 중 탈락한 참가자의 이름을 탐색하는 것이다. 처음 이 문제를 봤을 때, 꽤나 복잡해 보였지만 마라톤 경기에 참가한 선수의 수와 참가자 중 1명을 뺀 모두가 성공했다는 전제가 깔려있기에 쉽게 풀 수 있었다.

우선 정렬과 반복문 개념만 알고있어도 충분히 풀 수 있는 문제가 아닐까 싶다.

아래에 식을 적고, 이 식에 대한 풀이를 이어나가보겠다.

///

def solution(participant,completion):
    answer=''
    participant.sort()
    completion.sort()
    for i in range(len(completion)):
        if participant[i]!=completion[i]:
            answer=participant[i]
            break
    if answer=='':
        answer=participant[-1]
    return answer

///

먼저 문제에 들어가보면

def solution(participant,completion):

    answer=''

    return answer

이렇게 적혀있으므로, participant 와 completion 이렇게 두 리스트가 solution구문에서 이용된다는 것을 알 수 있다.

answer도 미리 str타입의 공간으로 배정해 놓는다.

그리고 우선 해야할 일은 abc 순으로 participant와 completion 명단을 정렬하는 것이다.

다음으로는 for구문을 이용해, participant의 i번째 이름과 completion의 i번째 이름을 비교하는 것이다. 

탈락한 사람은 completion명단에 없으므로, 분명 어느 한 구간에서는 participant와 completion이 다른 구간이 발생한다. 이 구간에 위치한 participant가 탈락자이므로 answer에 이 이름을 입력하고, 탈락자는 한명이기에 즉시 구문을 멈춘다(break). 그리고 정답을 return 하게 되면 문제는 해결된다.

하지만 이렇게 하면 모든 경우가 해결되는 것은 아니다. 예를들어 알파벳 정렬 기준 가장 마지막에 탈락한 인원이 있다면, completion의 인원은 participant의 인원보다 하나가 작기때문에 첫번째 for 구문에서 정답이 발견되지 않을 수 있다. 

Ex) participant=["a","b","c","z"]    completion=["a","b","c"]

completion의 길이가 3이기에, for구문은 c까지 밖에 검사를 못하고 가장 마지막에 있는 정답인 z를 도출할 수 없다.

따라서 for구문을 이용해 답을 찾아내지 못하였을때, 즉 answer안에 아무런 값이 없을 경우를 잡아서 정렬된 participant의 가장 마지막 이름을 answer에 넣어준다. 이렇게 해주면 for구문에서는 도출할 수 없었던 z라는 정답을 도출할 수 있다. 이렇게 한 이후 return answer을 해주면 정답이 도출되게 된다. 

두가지 경우를 대비해야했기에 생각을 좀 해야하는 문제이지만, 전체적인 난이도가 높지는 않은 문제이다.

하지만 이 모든 과정은 탈락자가 1명이라는 전제가 있기에 가능한 일이다. 그렇지 않다면 2차원 for구문을 이용하거나 remove 구문을 이용해 participant와 completion 명단을 하나하나 대조해나갈 필요가 있을 것으로 예상된다.

반응형