반응형
문제설명
https://www.acmicpc.net/problem/1874
사고과정
- 문제 이해하는 데 시간이 걸렸다. 그리고 스택을 이용해야 하는데, 1부터 수열의 원소 하나하나까지 push하고 그 원소값에 해당하면 pop해야 하는 건 알겠는데 코드로 구현하지는 못했다..
- 구글링을 해보았고 핵심 포인트는 특정 숫자를 입력받을 때마다 그 숫자가 같아질 때까지 1부터~그 숫자를 스택에 push 하고 스택 가장 위의 값이 그 숫자와 같으면 바로 pop 해주면 된다. 그리고 pop해줄 때 만약 x랑 같지 않다면 NO를 출력한다.
풀이(스스로 못 푼 풀이)
n = int(input())
stack = []
result = []
count = 1
flag = False
for _ in range(n):
x = int(input())
# count가 x가 될때까지 스택에 넣기
while count <= x:
stack.append(count)
result.append('+')
count += 1
if stack[-1] == x:
stack.pop()
result.append('-')
# 스택 마지막 값이 x보다 크면 NO!
else:
flag = True
break
if flag:
print('NO')
else:
print('\n'.join(result))
추가로 연습한 풀이
import sys
input = sys.stdin.readline
n = int(input())
stack = []
result = []
i = 1
for _ in range(n):
a = int(input())
while i <= a:
stack.append(i)
result.append('+')
i += 1
if stack[-1] < a:
result = 'NO'
break
stack.pop()
result.append('-')
if result == 'NO':
print(result)
else:
for res in result:
print(res)
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[BOJ] 10845번 - 큐 (0) | 2021.10.24 |
---|---|
[BOJ] 1406번 - 에디터 (0) | 2021.10.24 |
[BOJ] 9012번 - 괄호 (0) | 2021.10.23 |
[BOJ] 9093번 - 단어 뒤집기 (0) | 2021.10.23 |
[BOJ] 10828번 - 스택 (0) | 2021.10.23 |