완주하지 못한 선수

첫 코드

def solution(participant, completion):
    dict_1 = {}
    dict_2 = {}
    for i in range(0, len(participant)):
        dict_1[i] = participant[i]
    for i in range(0, len(completion)):
        dict_2[i] = completion[i] 
    dict_3 = {v:k for k,v in dict_2.items()}
    for i  in range(0, len(participant)):
        if dict_1[i] in dict_3.keys():
            temp = dict_1.pop(i)
            dict_3.pop(temp)
    answer = list(dict_1.values()).pop()
    return answer

다소 복잡한 코드였다. 핵심 아이디어를 점검하고, 간략하게 코드를 만들어보자.

핵심 아이디어

participant와 completion의 요소는 하나 차이이다. 두 개의 리스트를 정렬하고, 인덱스 별로 비교한 다음, 처음 다르게 나온 요소를 반환해보자.

개선된 코드1

def solution(participant, completion):
    
    participant.sort()
    completion.sort()
    
    for i in range(len(completion)):
        last_part = participant.pop()
        last_comp = completion.pop()
        
        if last_part != last_comp:
            return last_part
    
    return participant[0]

개선된 코드2

def solution(participant, completion):

    participant.sort()
    completion.sort()    
    for i in range(len(completion)):
        if not completion[i] == participant[i] :
            answer = participant[i]
            break            
        else:
            answer = participant[-1]

    return  answer

'알고리즘 > 프래그래머스 lv.1' 카테고리의 다른 글

[프래그래머스] 소수 찾기(Python)  (0) 2022.10.21
2016년  (0) 2022.10.19
나누어 떨어지는 숫자 배열  (0) 2022.10.19
하샤드 수  (0) 2022.10.19
k 번째 수  (0) 2022.10.19