코테 대비 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=' ')