Lumiere, and s5unnyjjj

[홀로 하는 코딩 공부] 달리기 경주(Python) 본문

Algorithm/Python

[홀로 하는 코딩 공부] 달리기 경주(Python)

s5unnyjjj 2024. 5. 13. 22:00
반응형

프로그래머스

사용 언어: Python

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

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

programmers.co.kr

 

*** 본 문제를 푸는 과정을 공유하려 한다.

 


▶ 처음에 본 문제를 보고 단순하게 아래와 같이 코드를 작성하였다.

def solution(players, callings):
    for calling in callings:
        idx = players.index(calling)
        change_name = players[idx-1]
        players[idx-1] = calling
        players[idx] = change_name
    return players

 

 

 

▶ callings의 최대 길이가 1,000,000인 것을 놓쳤다. 누가 봐도 시간초과가 발생할 것 같은 큰 수 이다. 작성한 코드에서 위치를 찾는 index함수를 사용한 것이 시간초과의 원인이라고 생각하여 callings에 해당하는 위치를 players에서 찾는 부분을 아래와 같이 작성하였다.

def solution(players, callings):
    players_dict = {}

    for i, player in enumerate(players):
        players_dict[player] = i

    for calling in callings:
        cur_i = players_dict[calling]

        players_dict[calling] = cur_i - 1
        players_dict[players[cur_i - 1]] = cur_i

        players[cur_i] = players[cur_i - 1]
        players[cur_i - 1] = calling

    return players

 

 

▶ 성공이다!!


>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.

>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.

>> 긴 글 읽어주셔서 감사합니다. 

 
반응형
Comments