개발자/알고리즘

[백준] 1874번 R

june__kim 2022. 1. 12. 09:31

[백준] 1874번

 

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

 

import sys

num = int(input())
stack = []
plus_minus = []

m = 0
n = 0
flag = 0

for i in range(num):
	n = int(sys.stdin.readline().strip())

	if n > m: # 
		for j in range(m + 1, n + 1):
			plus_minus.append("+")
			stack.append(j)
		m = n

	plus_minus.append("-")
	k = stack.pop()		

	if k != n:
		flag = 1

if flag == 0:
	for i in plus_minus:
		print(i)
else:
	print("NO")

 


 

핵심은, 하나의 스택(리스트)을 만들고 입력받은 숫자대로 그대로 따라가며 스택을 채우고 빼고를 반복한다.

 

그러다가 내가 스택에서 pop한 것과 입력받은 값이 맞지 않으면 그때는 NO를 출력.

 

흠,,, 나즁에 다시 한번 풀어봐야 할 듯.