[백준] 1874번 - 스택 수열

Cllaude·2023년 6월 23일
1

backjoon

목록 보기
11/65


문제 분석

스택의 원리를 정확하게 알고 있는지를 묻는 문제이다. 이 문제는 스택의 pop, push연산과 후입선출 개념을 이해하고 있다면 쉽게 풀 수 있다. 스택에 넣는 값은 오름차순 정렬이어야 한다는 것에 유념하며 문제를 풀면 된다.

문제를 푸는 과정의 아이디어는 다음과 같다
스택의 peek값과 입력으로 주어진 수열의 값들을 비교해보는 과정을 진행해본다


소스 코드

# 스택으로 수열 만들기

import sys
input = sys.stdin.readline

N = int(input())
goal = [None]*N
Result = ""
lastNum = 1  # 어디까지 스택에 추가해주었는지 기억하기 위한 변수
check = True
stk = []

for i in range(N):
    goal[i] = int(input())

for i in range(N):  # 스택의 peek 값과 주여진 수열의 값들을 비교해가는 과정
    if len(stk) == 0:
        while lastNum <= goal[i]:
            stk.append(lastNum)
            lastNum += 1
            Result += "+"
    if stk[-1] == goal[i]:
        stk.pop()
        Result += '-'
    elif stk[-1] < goal[i]:
        while lastNum <= goal[i]:
            stk.append(lastNum)
            lastNum += 1
            Result += "+"
        stk.pop()
        Result += '-'
    else:
        print("NO")
        check = False
        break

if check:
    for i in range(len(Result)):
        print(Result[i])

0개의 댓글