인지용

[백준] 27497 알파벳 블록 [python, 실버1, 스택] 본문

알고리즘

[백준] 27497 알파벳 블록 [python, 실버1, 스택]

인지용 2026. 1. 21. 14:49

https://www.acmicpc.net/problem/27497

 

import sys
from collections import deque

def input():
    return sys.stdin.readline().strip()

n = int(input())
dq = deque([])
orders = []

for i in range(n):
    arr = input().split()
    command = int(arr[0])

    if command == 1:
        dq.append(arr[1])
        orders.append(1)
    elif command == 2:
        dq.appendleft(arr[1])
        orders.append(0)
    else:
        if orders:
            a = orders.pop()

            if a == 1:
                dq.pop()
            else:
                dq.popleft()

if dq:
    print("".join(dq))
else:
    print(0)

 

 


 

덱과 명령어 기록용 배열을 사용해서 해결하면 된다.

 

현재 문자열은 덱에, 1, 2 명령어는 배열에 넣어주면 됨.

 

3이 나온다면 기록용 배열에 존재하는 마지막 값을 보고  분기쳐서 앞뒤중 어디서 pop 할건지 결정.

 

 

앞뒤 자유롭게 연산이 필요하다는 것을 보고 그냥 스택을 쓰지는 않을 것 같았다.

(스택으로 사용하면 시간초과 걸림)