문제


문제 해석
스택 수열이다.
여기서 내가 고민했던 것은
- 마지막으로 저장한 값을 알고 있어야한다. -> 변수 하나 만들자.
- if문을 통해 분기를 해야겠다.
- 조건은?
- 스택의 마지막 값 보다 크다.
- 마지막 입력 수 보다 크다.
- 진행
- 마지막 입력 수 보다 작다.
- 탈출 조건 성립 불가능
- 마지막 입력 수 보다 크다.
- 스택의 마지막 값 보다 작다.
- push 이후 다시 검증
- 스택의 마지막 값과 같다.
- 다음 수로 넘엉간다.
- 스택의 마지막 값 보다 크다.
- 조건은?
- if문의 조건들이 무수히 반복되어야한다.
코드
- 문자열로 만들었을때
import sys from collections import deque
n = int(sys.stdin.readline())
tmp = 0
d = deque()
d.append(0)
answer = ""
for _ in range(n):
num = int(sys.stdin.readline())
while True:
if d[-1] < num:
if tmp < num:
tmp += 1
d.append(tmp)
answer += "+\n"
else:
answer = "NO"
break
elif d[-1] == num:
d.pop()
answer += "-\n"
break
else: # 최대 값보다 작을 경우
if d[-1] == 0:
answer = "NO"
break
d.pop()
answer += "-\n"
if answer == "NO":
break
print(answer)
참고로 이 코드 더럽게 느리다.
코드2
```python
import sys
from collections import deque
n = int(sys.stdin.readline())
tmp = 0
d = deque()
d.append(0)
answer = ""
for _ in range(n):
num = int(sys.stdin.readline())
while True:
if d[-1] < num:
if tmp < num:
tmp += 1
d.append(tmp)
answer += "+\n"
else:
answer = "NO"
break
elif d[-1] == num:
d.pop()
answer += "-\n"
break
else: # 최대 값보다 작을 경우
if d[-1] == 0:
answer = "NO"
break
d.pop()
answer += "-\n"
if answer == "NO":
break
print(answer)
1번 코드는 그때그때 str 변수에 데이터를 추가했고, 2번 코드는 일단 list로 추가해서 마지막에 str값을 만들어준다.

'코테' 카테고리의 다른 글
| 리트코드 27.Remove Element JAVA (0) | 2023.08.24 |
|---|---|
| 리트코드 88. Merge Sorted Array JAVA (0) | 2023.08.23 |
| boj 9012 (0) | 2023.06.21 |
| Entity와 DTO (0) | 2023.06.20 |
| 백준 1463 (0) | 2023.05.09 |