문제

https://www.acmicpc.net/problem/1874

풀이

지문이 난해해서 한참 봤던 문제. 설명이 조금 더 상세했으면 좋겠다.

  • 1~N 까지 랜덤한 수를 입력 받는다.
  • 1~N 까지 오름차순으로 스택에 push하면서, 입력 받은 랜덤 수를 pop한다.
  • 스택에서 pop 해낼 수 없는 경우 “NO” 출력
n = int(input())
sequence = []
for _ in range(n):
    sequence.append(int(input()))

stack, result = [], []
stacknum = 1
for seqnum in sequence:
    # 스택에 비교값까지 push
    while stacknum <= seqnum:
        stack.append(stacknum)
        result.append("+")
        stacknum += 1
    # 스택마지막 값이 비교값과 같으면 pop
    if stack[-1] == seqnum:
        stack.pop()
        result.append("-")

if stack: # 스택에 남은 값이 있으면 실패
    print("NO")
else:     # 없으면 성공
    for r in result:
        print(r)

댓글남기기