

from collections import deque
deq = deque()
# Add element to the start
deq.appendleft(10)
# Add element to the end
deq.append(0)
# Pop element from the start
deq.popleft()
# Pop element from the end
deq.pop()
# 주어진 리스트를 데크의 오른쪽에 추가
deq.extend(array)
# 주어진 리스트를 데크의 왼쪽에 추가
deq.extendleft(array)
#item 을 데크에서 찾아 삭제
deq.remove(item)
#해당 deque 전체 삭제
deq.clear()
#역순으로 정렬
deq.reverse()
#데크를 Num 만큼 회전 ( 양수면 오른쪽, 음수면 왼쪽 )
#deque.rotate(num)
def solution(players, callings):
answer = []
for name in callings:
idx = players.index(name)
pre = players[idx-1]
players[idx-1] = name
players[idx] = pre
return players
from collections import deque
def solution(players, callings):
callings = deque(callings)
players = deque(players)
while callings:
name = callings.popleft()
idx = players.index(name)
players[idx] = players[idx - 1]
players[idx - 1] = name
return list(players)
그래서 질문을 확인해보니 index() 함수의 실행복잡도가 오래걸렸다
def solution(players, callings):
player_index = {player: i for i, player in enumerate(players)}
for name in callings:
current_idx = player_index[name]
if current_idx > 0:
prev_player = players[current_idx - 1]
players[current_idx],players[current_idx - 1] = players[current_idx - 1] ,players[current_idx]
player_index[name] -= 1
player_index[prev_player] += 1
return players
def solution(players, callings):
pla_dic = {key: i for i, key in enumerate(players)}
for p in callings:
c = pla_dic[p]
pla_dic[p] -= 1
pla_dic[players[c-1]] += 1
players[c-1], players[c] = players[c], players[c-1]
return players
callings 배열(크기:M)과 players 배열(크기:N)의 크기에 비례하기 때문에 시간복잡도는 둘의 곱인 O(MN)이 되어 이 방법으로 풀 수 없습니다. 일반적으로 O(n)에서 n의 값이 1억을 넘으면 통과가 어렵다고 보면 되는데, 문제 조건을 보면 백만*5만=5백억이라는 수가 나오죠. 이 문제는 양방향 인덱싱을 이용해야 하고, 그러기 위해선 딕셔너리 두 개 또는 딕셔너리 하나와 리스트 하나가 필요합니다.