[백준] 스택 수열

백준 - 스택 수열

문제를 이해하는 것 자체도 오래걸렸다. 그렇지만 바로 풀이를 듣는 것보다 익숙해지기 위해서 문제를 자세히 읽으니 비로소 이해했다. 자~세히 읽어야한다.

숫자 n 과 1부터 n까지로 구성된 수열이 주어진다.(낱개의 원소로 주어져서 헷갈렸다..) 스택에 넣었다가 pop하는 방식으로 수열을 만들 수 있다. 스택에 1부터 n까지 넣을 때는 반드시 오름차순으로(1부터 n까지 차례대로) 넣어야한다.

n이 8이고 수열이 4,3,6,8,7,5,2,1 이라면 배열의 처음 숫자는 4이므로 스택에 1,2,3,4 까지 넣고 4를 pop하는 식으로 진행한다.

내 풀이(미완성)

arr = []
b = []
arr.append(input()) #반복을 해야하는데..
j = 1

for i in range(len(arr)):
    print('+')
    b.push(j)
    
    if j < arr[i]:
        j++
    elif j = arr[i]:
        print('-')
        b.pop()
    else:
        print('NO')
        return


나동빈 강사님 풀이

n = int(input())

count = 1
stack = []
result = []

for i in range(1, n+1): #데이터 개수만큼 반복
    data = int(input())
    while count <= data: #입력 받은 데이터에 도달할 때까지 삽입
        stack.append(count)
        count += 1
        result.append('+')
    if stack[-1] == data: #스택의 최상위 원소가 데이터와 같을 때 출력
        stack.pop()
        result.append('-')
    else: #불가능한 경우
        print('NO')
        exit(0)
        
print('\n'.join(result)) #가능한 경우

태그:

카테고리:

댓글남기기