크게 어렵지 않은 문제인 것 같아서. 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())
실시간 현황판처럼 딕셔너리를 만들어서 업데이트를 하는 방식으로 풀었다.