달리기 경주 문제 바로가기

나의 풀이

def solution(players, callings):
    answer = []
    names = {}
    ranks = {}
    
    for i,player in enumerate(players):
        ranks[i+1] = player
        names[player] = i+1
    for call in callings:
        idx = names[call]
        p1 = ranks[idx-1]
        ranks[idx-1],ranks[idx] = call,p1
        names[call],names[p1] = idx-1,idx
    answer=list(ranks.values())
    return answer

CODE REVIEW

  1. 처음에는 수열로 array[i],array[i-1]=array[i-1],array[i]처럼 구현했는데, 시간초과 문제가 발생하여 실패했다.
  2. 탐색 과정에서 소요되는 시간을 줄이기 위해 딕셔너리를 이용하여 구현했다.
  3. (순위,이름) (이름,순위) 순서쌍의 딕셔너리 두 개를 생성하고 call마다 각각의 딕셔너리를 업데이트 해주는 방식이다.