잡다로그

[Python/코테] 백준 27497 블록 본문

Algorithm

[Python/코테] 백준 27497 블록

날으는다람쥐 2023. 11. 13. 16:45

27497 블록

문제 및 조건 설명: https://www.acmicpc.net/problem/27497

알고리즘 설계

💡idea.

양쪽으로 추가가 가능하므로 덱 자료구조를 사용한다.

가장 나중에 추가된 블록을 파악하기 위해 스택 자료 구조를 사용한다.

 

🎲step.

  1. 빈 덱을 선언한다.
  2. 입력되는 숫자에 맞춰 연산을 수행한다.
    1. 1일 때 append 한다.
    2. 2일 때 appendleft 한다.
    3. 3일 때 가장 나중에 추가된 문자열을 pop한다.
      가장 나중에 추가된 문자열은 맨 앞 또는 맨 뒤이다. (연산이 두개 뿐이므로)
      직전 명령어가 1이면 맨 뒤, 2이면 맨 앞 원소가 된다. (명령어 확인은 스택 활용)
  3. 완성된 문자열을 출력한다. 완성된 문자열이 빈 문자열인 경우 0을 출력한다.

알고리즘 구현

from collections import deque
import sys

n = int(input())
d = deque()     # 문자열 저장을 위한 덱
s = deque()     # 명령어 저장을 위한 스택

for _ in range(n):
    input = sys.stdin.readline().split()

    if input[0] == '1':
        d.append(input[1])
        s.append(1)

    elif input[0] == '2':
        d.appendleft(input[1])
        s.append(2)

    else:
        if len(d) != 0:
            if s.pop() == 1:
                d.pop()
            else:
                d.popleft()

if len(d) == 0:
    print("0")
else:
    result = ''.join(d)
    print(result)

나다어

  • 문제를 잘 읽자 !
  • 문자열/덱의 요소를 하나의 문자열로 출력하기 위해서는 join 함수를 사용한다.

'Algorithm' 카테고리의 다른 글

[C++/코테] DFS  (0) 2023.11.13
[C++/코테] BFS  (0) 2023.11.13
[Python/코테] 백준 2164 카드2  (0) 2023.11.13
[Python/코테] 백준 9012 괄호  (0) 2023.11.13
[Python/코테] 백준 1926 그림  (0) 2023.11.11
Comments