본문 바로가기

Algorithm & Data Structure

백준 - 1874번(스택)

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
반응형