티스토리 뷰

728x90
반응형

문제

www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

코드

n = int(input())

stack = []
result = []
count = 1
boolean = True

for i in range(n):
    a = int(input())
    while count <= a:
        stack.append(count)
        result.append('+')
        count += 1
    if stack[-1] == a:
        stack.pop()
        result.append('-')
    else:
        boolean = False
        break

if boolean == False:
    print('NO')
else:
    for i in result:
        print(i)

 

코드설명

1부터 n까지에 수를 스택에 넣었다가 뽑아서 하나의 수열을 만드므로 한번 pop을 해줬던 수는 이미 수열에 들어갔기 때문에 생략해주면 된다.

예제입력1 에서 n에 8이 들어갔기 때문에 1~8까지의 수를 스택에 넣었다가 뽑아서 수열을 만드는 문제이다.

 

 

처음값 4가 들어오게 되면 스택에 1,2,3,4를 넣게되고 4를 빼준다.

다음 3이 들어오면 count보다 작아서 while문에 들어가지 않게되고 스택 맨위값과 입력값이 같기 때문에 바로 pop을 해준다.

 

여기서 만약 스택에 맨위값과 내가 지금 얻고 싶은 입력값 a가 다르다면 false를 준다.

스택은 맨위값부터 차례대로 나가게 되므로 맨위값과 입력값a가 다르다는 뜻은 원하는 값을 얻지못한다는 뜻이다.

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31