Code/Python

[Python] 백준 1874번 스택 수열

ki1111m2 2023. 9. 26. 16:07

 

# 스택 수열
# 1 ~ n까지의 수를 이용해 수열을 만든다. 스택의 연산을 이용하여 만들 수 있는지 판단하라.
# 스택에는 오름차순으로 입력되며, 수열은 1 이상 n 이하의 정수로 이루어져 있으며, 같은 수가 두 번 나오는 일은 없다.
# push 연산은 +로, pop 연산은 -로, 불가능하다면 NO를 출력한다.

n = int(input())
array = [0] * n

for i in range(n):
    array[i] = int(input())

stack = []
num = 1
answer = []
result = True

for i in range(n):
    # 필요한 수가 현재 자연수보다 크다면 스택에 자연수 삽입 및 자연수++
    while array[i] >= num:
        stack.append(num)
        num += 1
        answer.append('+')
    
    # 스택의 끝 요소가 필요한 수의 값과 같다면 삭제
    if stack[-1] == array[i]:
        stack.pop()
        answer.append('-')
        
    # 스택의 끝 요소가 필요한 요소와 다르다면 불가능
    else:
        print('NO')
        result = False
        break


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

처음엔 아래처럼 했는데 시간 초과가 발생했다 ..

if문 안에 while문이 들어간 것이 문제였을까? 아님 이중 if문?

# 스택 수열
# 1 ~ n까지의 수를 이용해 수열을 만든다. 스택의 연산을 이용하여 만들 수 있는지 판단하라.
# 스택에는 오름차순으로 입력되며, 수열은 1 이상 n 이하의 정수로 이루어져 있으며, 같은 수가 두 번 나오는 일은 없다.
# push 연산은 +로, pop 연산은 -로, 불가능하다면 NO를 출력한다.

n = int(input())
array = [0] * n

for i in range(n):
    array[i] = int(input())

stack = []
num = 1
answer = []
result = True

for i in range(n):
    if array[i] >= num:
        while array[i] >= num:
            stack.append(num)
            num += 1
            answer.append('+')
        stack.pop()
        answer.append('-')
    else:
        p = stack.pop()
        if p > array[i]:
            print("NO")
            result = False
            break
        else:
            answer.append('-')

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

'Code > Python' 카테고리의 다른 글

[Python] 백준 17298번 오큰수  (0) 2023.09.27
[Python] 백준 2164번 카드2  (0) 2023.09.26
[Python] 백준 11003번 최솟값 찾기  (0) 2023.09.26
[Python] 백준 12891번 DNA 비밀번호  (0) 2023.09.26
[Python] 백준 1940번 주몽  (0) 2023.09.25