def solution(players, callings):
for c in callings:
p=players.index(c)
players[p-1],players[p]=players[p],players[p-1]
return players
처음에 이렇게 풀었는데 시간초과 오류가 났다
def solution(players, callings):
player_indexes = {player: index for index, player in enumerate(players)}
for j in callings:
current_index = player_indexes[j]
desired_index = current_index - 1
if current_index > 0 and players[desired_index] != j:
players[current_index], players[desired_index] = players[desired_index], players[current_index]
player_indexes[players[current_index]] = current_index
player_indexes[players[desired_index]] = desired_index
return players
다른 사람들의 풀이를 보니 나랑 비슷한데 왜 이 풀이가 오류가 났을까 생각해보니
{player:index}
딕셔너리를 만들어줘서 c를 키값으로 이용해서 검색하면 속도가 훨씬 빠르기 때문이었다
내가 했던 것과 마찬가지로 players 차제가 바뀌어서 players를 그대로 리턴해주면 된다
def solution(players, callings):
dic_players = {p:i for i,p in enumerate(players)}
dic_rank = {i:p for i,p in enumerate(players)}
for call in callings :
call_rank = dic_players[call]
call_front = dic_rank[call_rank - 1]
dic_players[call], dic_players[call_front] = dic_players[call_front], dic_players[call]
dic_rank[call_rank], dic_rank[call_rank - 1] = dic_rank[call_rank - 1], dic_rank[call_rank]
return list(dic_rank.values())
보다 더 빠른 건 딕셔너리를 2개 이용하는 방법으로 랭크를 키로 하는 {index:player}
딕셔너리를 사용해서 답을 구하는 방식이다.
딕셔너리만 이용하기때문에 속도가 가장 빠른 것 같다