코테 대비 python/백준
18115 카드 놓기
ylab
2023. 4. 16. 22:33
https://www.acmicpc.net/problem/18115
18115번: 카드 놓기
수현이는 카드 기술을 연습하고 있다. 수현이의 손에 들린 카드를 하나씩 내려놓아 바닥에 쌓으려고 한다. 수현이가 쓸 수 있는 기술은 다음 3가지다. 제일 위의 카드 1장을 바닥에 내려놓는다.
www.acmicpc.net
시간초과 풀이
#####시간초과 풀이 ######
##1. popleft()
##2. popleft() popleft() insert()
##3. pop()
from collections import deque
import sys
input=sys.stdin.readline
n=int(input())
card=list(map(int,input().split()))
q=deque([0]*n)
for i in range(n):
q[i]='a'*(i+1)
#print(q)
tmp=[0]*n
#print(tmp)
idx=1
for i in card:
if i ==1:
tmp[n-idx]=q.popleft()
elif i==2:
a=q.popleft()
b=q.popleft()
q.insert(0,a)
tmp[n-idx]=b
elif i==3:
tmp[n-idx]=q.pop()
idx+=1
#print(tmp)
result=[0]*n
ans=dict()
for i in range(n):
result[i]=i+1
for i in range(n):
ans[tmp[i]] = result[i]
#tmp[i]= result[i]
#print(ans)
#print(q)
for i in range(n-1):
print(ans['a'*(i+1)],end=' ')
print(ans['a'*(n)], end='')
핵심은 해왔던 연산을 거꾸로하면 처음 카드 순서가 나오는 것!!
#####
##1. popleft()
##2. popleft() popleft() insert()
##3. pop()
from collections import deque
import sys
input=sys.stdin.readline
n=int(input())
card=list(map(int,input().split()))
#####거꾸로 하면 처음 카드 숫자 나옴 ######
card.reverse()
q=deque()
for i in range(n):
if card[i] ==1:
q.appendleft(i+1)
elif card[i]==2:
q.insert(1,i+1)
elif card[i] ==3:
q.append(i+1)
for i in q:
print(i, end=' ')