728x90
반응형
import sys
n = int(sys.stdin.readline().strip())
ans = []
case = []
arr = [0]
tmp = 0
GER = 1
trash = []
for i in range(n):
arr.append(int(sys.stdin.readline().strip()))
for i in range(n+1):
case.append(i)
im = arr[arr.index(max(arr)):]
for i in range(len(im)-1):
if im[i] < im[i + 1]:
GER = 0
break
if GER == 0:
ans.append('NO')
else:
for i in range(1, n + 1):
z = case.index(arr[i]) # 주어진 값의 case 에서의 인덱스 위치 현재:4
# tmp = 2
if z > tmp and arr[i] not in trash:
for j in range(tmp, z):
ans.append('+')
ans.append('-')
tmp = z - 1
trash.append(case[z])
del case[z]
elif z < tmp and arr[i] not in trash:
for j in range(tmp, z):
ans.append('-')
ans.append('-')
tmp = z - 1
trash.append(case[z])
del case[z]
elif z == tmp and arr[i] not in trash:
ans.append('-')
tmp = z - 1
trash.append(case[z])
del case[z]
for i in ans:
print(i)
문제를 잘못 이해했을 때 굉장히 복잡한 방법으로 풀었다.
출력 초과가 떠서 정답 처리를 받지 못했고 실제로 풀이법도 잘못됐다.
count = 1
temp = True
stack = []
op = []
N = int(input())
for i in range(N):
num = int(input())
# num이하 숫자까지 스택에 넣기
while count <= num:
stack.append(count)
op.append('+')
count += 1
# num이랑 스택 맨 위 숫자가 동일하다면 제거
if stack[-1] == num:
stack.pop()
op.append('-')
# 스택 수열을 만들 수 없으므로 NO
else:
temp = False
break
# 스택 수열을 만들수 있는지 여부에 따라 출력
if temp == False:
print("NO")
else:
for i in op:
print(i)
미리 만들어둔 수열에서 pop을 통해서 원소가 나가면 그것을 수열의 순서에 맞게 만드는 것이었다.
append*4->[1,2,3,4], [] -> pop *2 ->[1,2], [4,3] -> append*2 -> [1,2,5,6], [4,3] -> pop -> [1,2,5], [4,3,6] 이런 식으로 말이다.
728x90
반응형
'Algorithm & Data Structure' 카테고리의 다른 글
백준 - 10989번(반복문, 아이디어(?)) (0) | 2022.01.30 |
---|---|
백준 - 18528번(큐 구현하기) (0) | 2022.01.30 |
백준 - 4949번(스택, 전체탐색) (0) | 2022.01.29 |
백준 - 15954번(정수론, 전체탐색) (0) | 2022.01.28 |
백준 - 9375번 (0) | 2022.01.27 |