반응형
코드 작성
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)
반응형
'코딩 > Python' 카테고리의 다른 글
[Python] 백준 9020 골드바흐의 추측 (0) | 2022.11.19 |
---|---|
[Python] 백준 10989 수 정렬하기3 (0) | 2022.11.19 |
[Python] 백준 1676 팩토리얼 0의 개수 (0) | 2022.11.18 |
[Python] 과제 안 내신 분..? (0) | 2022.11.18 |
[Python] 백준 9012 괄호 (0) | 2022.11.17 |