본문 바로가기

코딩/Python

[Python] 백준 1874 스택 수열

반응형

코드 작성

n = int(input())
stack = []
ans = [] 
cur = 1
for _ in range(n):
    num = int(input())    
    while cur<=num:
        stack.append(cur)
        ans.append('+')
        cur += 1
        
    if stack[-1]==num:
        stack.pop()
        ans.append('-')
    else:
        print('NO') 
        break
else:
    for i in ans:
        print(i)

 

코드  풀이

 

#1.

cur(cursor)은 기본 1이며 1씩 증가하는 숫자를 stack에 쌓으며 입력 값 num과 같아 질 때까지 stack에 쌓는다.

그리고 stack에 슷자가 쌓일 때 마다 ans’+‘값을 쌓는다.

 

#2.

stack[-1]의 젤 위에 있는 숫자와 num값이 같아질 경우 stack의 젤 위에 있는 숫자를 뽑아낸다(pop()).

그와 동시에 ans’-‘를 추가한다.

*젤 아래 숫자를 뽑을 경우 pop(0)으로 표현

 

#3.

위 수열로 반복되지 않을 경우 'NO'를 출력한다.

 

#4.

정상적으로 작동할 경우 ans를 출력한다.

 

예시

while num<=cur 1회 실행하였을 때

num cur stack ans
3 1 1 +
  2 2 +
  3 3 +
  4    

 

 

 if stack[-1]==num: 1회 실행하였을 때

num cur stack ans
3 1 1 +
  2 2 +
  3   +
  4   -

 

for i의 2번째 while문 실행하였을 때

num cur stack ans
3 1 1 +
  2 2 +
  3   +
  4   -
5   4 +
  5 5 +
  6    

 

 

n = int(input())
stack = []
ans = []  #플러스(+), 마이넣스 넣기(-)
cur = 1
for _ in range(n):
    num = int(input())    
    while cur<=num:  #설명1
        stack.append(cur)
        ans.append('+')
        cur += 1
        
    if stack[-1]==num: #설명2
        stack.pop()
        ans.append('-')
    else:
        print('NO')  # stack의 top이 입력한 수가 아니면 스택을 만들 수 없다.
        break
else:
    for i in ans:
        print(i)

 

 
반응형