Algorithm

[프로그래머스 lv1] 달리기 경주

09009 2023. 10. 8. 21:59

문제 보기

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

 

프로그래머스

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

programmers.co.kr

 

문제 해결

참고 자료: https://jsdnl123.tistory.com/27

 

프로그래머스 - 달리기 경주 풀이(Python)

안녕하세요, Will 입니다. 오늘은 프로그래머스 연습문제 중 '달리기 경주' 문제 풀이를 가지고 왔습니다. 난도가 높은 문제로 보이지 않았는데 막상 풀어보니 시간초과가 발생하여 애를 좀 먹었

jsdnl123.tistory.com

index를 찾아서 조건에 해당하는 결과를 찾는 것은 검색 시간이 오래 걸리기 때문에 시간초과가 발생한다.

딕셔너리를 이용하여 키, 값을 설정해주고 조건에 해당하는 결과를 찾으면 players 전체를 검색할 필요가 없다.

 

 

소스 코드

def solution(players, callings):
    answer = []
    
    # 기존 처음에 있는 등수를 저장한다.
    dic = {}
    for i in range(len(players)):
        dic[players[i]] = i
        
    # 등수가 바뀐 기록을 하나씩 확인한다.
    for i in callings:
        front, back = dic[i]-1, dic[i]
        
        # dic에서 등수를 바꿔준다.
        dic[players[front]], dic[players[back]] = back, front
        
        # player에서 등수를 바꿔준다.
        players[back], players[front] = players[front], players[back]
        
        
    return players