용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (248)
    • 개발 (75)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (19)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(Python) 백준 1874번 - 스택 수열
알고리즘/알고리즘 문제 풀이

(Python) 백준 1874번 - 스택 수열

2023. 1. 10. 12:09

문제 링크 : https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

풀이

deque를 stack으로 사용하여, 입력으로 들어오는 수열을 만들기 위해 발생할 수 있는 모든 경우를 생각하며 하나씩 구현하였다. 

import sys
from collections import deque

n = int(sys.stdin.readline())
stack = deque() # 입력 받은 수들을 저장할 deque
printdeq = deque() # 출력할 '+', '-'를 저장할 deque
top = 0 # 저장한 최대 수가 무엇이었는지 기억할 변수
can = True # 수열이 가능한지 여부
for i in range(n):
    num = int(sys.stdin.readline()) # 수열을 이루는 수들 입력 받기
    try:
        if stack and stack[len(stack)-1] == num: # stack에 값이 들어있고, stack의 맨 위 값과 num이 같다면
            stack.pop() # 맨 위 값 pop
            printdeq.append('-') # '-' 출력 버퍼에 저장
        elif top > num: # 저장한 최대 수가 num보다 크다면
            for _ in range(top-num): # 두 수의 차만큼
                stack.pop() # pop
                printdeq.append('-') # '-' 출력 버퍼에 저장
        else:
            while top < num: # 저장한 최대 수가 num보다 작다면
                top += 1 # 저장한 최대 수가 num가 될 때까지
                stack.append(top) # append
                printdeq.append('+') # '+' 출력 버퍼에 저장
            stack.pop()
            printdeq.append('-') # '-' 출력 버퍼에 저장
    except IndexError: # IndexError가 발생하면
        can = False # 불가능한 수열
        pass
if can == False:
    print("NO")
else:
    for i in printdeq:
        print(i)

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(Python) 백준 1966번 - 프린터 큐  (0) 2023.01.13
(Python) 백준 1929번 - 소수 구하기  (0) 2023.01.11
(Python) 백준 10866번 - 덱  (0) 2023.01.10
(Python) 백준 10845번 - 큐  (0) 2023.01.10
(Python) 백준 10828번 - 스택  (0) 2023.01.10
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (Python) 백준 1966번 - 프린터 큐
    • (Python) 백준 1929번 - 소수 구하기
    • (Python) 백준 10866번 - 덱
    • (Python) 백준 10845번 - 큐
    용꿀
    용꿀

    티스토리툴바