https://www.acmicpc.net/problem/18115
i번째로 카드를 내려 놓았을 때 내려 놓은 카드는 N-i 카드 이므로
원래 가지고 있던 카드의 인덱스 0~N을 덱에 넣어놓은 후, 인덱스를 하나씩 빼면서 정답 배열에 카드를 넣어주었다.
1인 경우에는 덱의 제일 앞의 인덱스에 카드를 넣어주면 되고
2인 경우에는 덱의 앞에서 두번째 인덱스에 넣어주어야 하므로 맨 앞의 인덱스는 따로 저장해놓고 두번째 인덱스를 pop한 후, 다시 첫번째 인덱스를 앞에 넣어준다.
3인 경우에는 덱의 맨 마지막 인덱스에 카드를 넣어준다.
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
q = deque()
for i in range(N):
q.append(i)
ans = [0]*N
for i in range(N):
if (arr[i] == 1):
ans[q.popleft()] = N-i
elif (arr[i] == 2):
n = q.popleft()
ans[q.popleft()] = N-i
q.appendleft(n)
elif (arr[i] ==3):
ans[q.pop()] = N-i
for i in ans:
print(i, end=" ")
'알고리즘💻 > 스택&큐&덱' 카테고리의 다른 글
BOJ 9012번: 괄호 (0) | 2021.07.24 |
---|---|
BOJ 20923번: 숫자 할리갈리 게임 (0) | 2021.07.23 |
BOJ 3078번: 좋은 친구 (0) | 2021.07.22 |
BOJ 2304번: 창고 다각형 (0) | 2021.07.22 |
BOJ 2347번: 풍선 터뜨리기 (0) | 2021.07.12 |