# 문제
https://www.acmicpc.net/problem/1874
***
# 문제 해석
## 입력
첫번째 줄에 두번째 줄부터 들어올 배열의 크기 N이 주어지고, 다음 줄부터 N개의 정수가 입력된다.
## 출력
1부터 N까지의 수를 이용해 push 와 pop 연산을 하는데, pop 할 때 삭제되는 수를 배열로 만들었을 때,
입력된 배열과 같아지도록 만들기 위해 해야하는 연산의 순서를 출력한다.
이때, push는 +로, pop은 -로 출력한다.
만약 입력된 배열과 같이 만들 수 없다면, NO를 출력한다.
예를 들어, [1, 3, 2]가 배열로 입력되었다면, push 연산을 할 때, 1부터 N까지 들어가기 때문에
push연산으로 [1]
pop연산으로 []
push 연산으로 [2]
push 연산으로 [2, 3]
pop 연산으로 [2]
pop 연산으로 []
이렇게 되는데, 이때 pop연산으로 삭제된 수를 순서대로 배열에 입력하면 [1, 3, 2]가 되므로,
+
-
+
+
-
-
이렇게 출력하면 되는 것이다.
***
# 풀이
### 1번 풀이
pop명령으로 InputArr의 요소를 지우고 다음 값을 확인하기 위해 리스트를 뒤집는다.
for 반복문으로 1부터 N까지의 수를 연산한다.
StackArr에 i를 push하고 StackArr와 InputArr의 마지막 요소가 같은 동안 pop함수를 실행한다.
InputArr의 길이가 0이 아니라면 NO를 출력하고, 아니라면 배열을 출력한다.
```python
InputArr = [int(input()) for _ in range(int(input()))]
InputArr = InputArr[::-1]
StackArr = []
AnswerArr = []
def push(num):
global StackArr, AnswerArr
StackArr.append(num)
AnswerArr.append('+')
def pop():
global StackArr, InputArr, AnswerArr
StackArr.pop()
InputArr.pop()
AnswerArr.append('-')
for i in range(1, N+1):
push(i)
while StackArr and InputArr and StackArr[-1] == InputArr[-1]:
pop()
if len(InputArr) != 0:
print('NO')
else:
print(*AnswerArr, sep='\n')
```
'Algorithm Study' 카테고리의 다른 글
백준 28278번 스택 2 - Python (0) | 2024.02.19 |
---|---|
C언어 기초 문법 총정리 🦖 (0) | 2024.02.18 |
귀엽게 생긴 GO랭을 써보자 (0) | 2024.02.18 |
백준 9506번 약수들의 합 (0) | 2024.02.18 |
백준 27433번 팩토리얼 2 - Python (0) | 2024.02.18 |
댓글