1. 문제
2. 접근 방법
1. 인풋을 담을 리스트
2. pop, push할 숫자를 담은 range(N, 0, -1)리스트
3. stack 역할을 할 리스트
4. result를 담을 리스트 (수열을 만들 리스트)
이렇게 총 4개의 리스트가 필요하다
현재 보고 있는 숫자(stack)보다 클 경우 push하다가 원하는 숫자에서 pop을 하면되는데,
만약 현재 숫자보다 작을 경우 pop을 통해 원하는 숫자까지 pop을 해야한다. 따라서 만들 수 없음 ~!
이 점만 유의한다면 쉽게 풀이할 수 있다.
3. 코드
python
N = int(input())
inputs = [int(input()) for _ in range(N)]
numbers = list(range(N, 0, -1))
stack = [0]
result = []
print_lst = []
flag = True
for i in range(N):
if inputs[i] != stack[-1]:
if inputs[i] > stack[-1]:
while inputs[i] != stack[-1]:
stack.append(numbers.pop())
print_lst.append('+')
elif inputs[i] < stack[-1]:
print('NO')
flag = False
break
if inputs[i] == stack[-1]:
result.append(stack.pop())
print_lst.append('-')
if flag:
print(*print_lst, sep="\n")
4. 마치며
.
'Algorithm > Python' 카테고리의 다른 글
[백준 7568] 덩치 (0) | 2021.04.22 |
---|---|
[백준 1181] 단어 정렬 (0) | 2021.04.22 |
[백준 2156] 포도주 시식 (0) | 2021.04.22 |
[백준 20061] 모노미노도미노2 (0) | 2021.04.22 |
[백준 17837] 새로운 게임2 (0) | 2021.04.21 |