백준 1874 : 스택 수열 - 파이썬

낙원·2022년 12월 26일
1

Baekjoon

목록 보기
15/15
post-thumbnail

문제

문제 링크

입력된 수열을 만들기 위해 필요한 연산을 한 줄에 한 개씩 출력한다. push연산은 +로, pop 연산은 -로 표현하도록 한다. 불가능한 경우 NO를 출력한다.

해결 방안

스택 문제
앞서 해결했던 스택의 특성을 활용해 생각보다 쉽게 해결했다!!
스택 리스트와 +, -를 저장하는 리스트 두 개를 만들었다.

1) 입력된 수보다 작은 수를 모두 스택에 넣는다.
2) 스택의 가장 위 숫자와 첫 번째 수가 같으면 pop()으로 스택에서 꺼낸다.
3) 동일하지 않으면 스택 수열을 만들 수 없으므로 NO를 출력한다.

코드

import sys

n = int(sys.stdin.readline())

arr = []
result = []
cnt = 0

flag = True

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

    while cnt < k:
        cnt += 1
        arr.append(cnt)
        result.append('+')

    if arr[-1] == k:
        arr.pop()
        result.append('-')

    else:
        flag = False
        break

if flag:
    for i in result:
        print(i)

else:
    print("NO")

다행히 시간초과도 나지 않고 잘 해결한 문제다.
수열을 잘 몰라서 문제 이름만 보고 계속 미루고 있었는데 생각보다 쉽게 해결할 수 있어서 정말 좋다ㅎㅎ :D

0개의 댓글