달리기경주

Kingjo·2023년 6월 11일
0

크게 어렵지 않은 문제인 것 같아서. list의 index를 활용한 풀이를 해보았다.

내 풀이

def solution(players, callings):
    for calls in callings:
        calling_player = players.index(calls)
        players[calling_player], players[calling_player-1] = players[calling_player-1], players[calling_player] 
    answer = players
    
    return answer

로직은 맞는데, list.index()의 속도가 매우 느린 것 같다. (list의 처음부터 끝까지 순회하면서 parameter를 찾으니까...) 따라서 다른 방법을 찾아보았다.

def solution(players, callings):    
    player_dict = {player:rank for rank, player in enumerate(players)}
    rank_dict = {rank:player for rank, player in enumerate(players)}
    
    for call in callings:
        rank = player_dict[call]
        
        player_dict[rank_dict[rank-1]], player_dict[rank_dict[rank]] = player_dict[rank_dict[rank]], player_dict[rank_dict[rank-1]]
        rank_dict[rank-1], rank_dict[rank] = rank_dict[rank], rank_dict[rank-1]
    
    return list(rank_dict.values())

실시간 현황판처럼 딕셔너리를 만들어서 업데이트를 하는 방식으로 풀었다.

profile
나사 빠진 걸 좋아합니다

0개의 댓글