[백준] 스택 수열 1874번

나의 풀이

N = int(input())
stack = []
symbol = []
idx = 1
for i in range(N):
    num = int(input())
    while idx <= num:
        stack.append(idx)
        idx += 1
        symbol.append("+")
    if stack[-1] == num:
        stack.pop()
        symbol.append("-")
    else:
        break
print("\n".join(symbol)) if len(stack) == 0 else print("NO")
  • 우선 스택은 FILO(First In Last Out) 구조로 처음에 들어온 인자가 제일 마지막에 나가는 구조이다. 상자 쌓기를 예로 들 수 있는데, 보통 상자를 수직으로 쌓으면 맨 처음에 쌓은 상자가 맨 밑에 깔리게 되고, 마지막에 쌓은 상자가 맨 위에 놓이게 된다. 그렇기 때문에 맨 밑에 있는 상자를 꺼내기 위해서는 맨 위에있는 상자부터 제거해 나가야 한다.
  • N개의 숫자를 받기위해 N번 만큼 반복을 돌면서 idx 가 입력받은 num 보다 작거나 같은 동안 stack 에 idx 를 추가해주고 idx 를 1씩 증가시킨다. (ex| num 이 4일 경우 stack 에는 1, 2, 3, 4 가 추가되고 idx 는 5가된다.) 그리고 symbol 에는 스택에 추가를 했으니 '+' 기호를 추가해준다.
  • 추가가 완료된 후 만약 stack 마지막에 있는 숫자와 입력 받은 num 이 같다면 해당 숫자를 stack 에서 빼주고 symbol 에 '-' 를 추가해준다.
  • stack의 마지막 숫자와 num 이 같지 않다면 스택 구조를 위반하기 때문에 반복을 종료한다.
  • stack에 숫자가 남아있지 않다면 스택 구조에 맞게 숫자를 입출력 된 것이기 때문에 기호를 한 줄씩 출력해준다. 그게 아니라면 "NO" 를 출력해준다.

0개의 댓글