[백준 1874] 스택 수열 - python (solved.ac - 실버 3)
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
풀이
문제를 보았을때 알수있는 힌트
스택은 push,pop의 개념을 알고있어야한다. 스택에서 push를 하면 데이터가 벽돌처럼 쌓이고, pop을 통해 맨 위에 있는 데이터를 빼는 것이다.
예시로 5(push), 3(push), 1(push), pop(), 6(push), pop(), pop()이렇게 되어있다면 5가 쌓이고 다음으로 3이 쌓이고 1이쌓인다. 이후 pop을 통해 꺼내는데 5가 빠지는 것이 아닌 1이 빠진다. 이후 6을 다시 쌍아서 5,3,6 형식으로 담겨져있다. 이후 pop을 두번 해서 5만이 남는다.
이렇세 스택을 이해하고 코드를 짜면 된다.
또한 하나의 조건이 더 있는데 스택의 맨 처음보다 이전의 값을 찾으면 NO가 나오게 하면 된다.
import sys
input = sys.stdin.readline
n = int(input())
n_list=[i+1 for i in range(n+1)]
stack=[]
result=[]
result_bool=True
for i in range(n):
temp=int(input())
while True:
if temp>=n_list[0]:
stack.append(n_list[0])
n_list.pop(0)
result.append("+")
elif temp==stack[-1]:
stack.pop()
result.append("-")
break
else:
result_bool=False
break
if result_bool==True:
for i in result:
print(i)
else:
print("NO")
https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon1874.py
GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리
코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.
github.com