본문 바로가기

항해99 chap02

스택 수열 - 스택

스택수열

백준 스택 수열.


    stack =[]
    answer  =[]
    n = int(input())  # 8 (입력 개수)
    arr = [int(input()) for _ in range(n)]  # [4, 3, 6, 8, 7, 5, 2, 1] (입력 배열)
    index = 0

    for i in range(1,n+1):          # 1 2 3 4 5 6 7 8
        stack.append(i)             # 스택이 비어있으면 안되서
        answer.append('+')

        while stack and stack[-1] == arr[index]:     # 스택이 안비어있고 스택의 마지막이 배열의 인덱스와 같으면
            stack.pop()
            answer.append('-')
            index+=1                                    #인덱스 올려주기
    if stack:
        print("No")
    else:
        for i in answer:
            print(i)

아이디어

index 변수를 주어 arr[index]와 stack[-1]을 비교해준다.

과정

  1. stack이 비어있으면 안되므로 i순서대로 append 즉 push이므로 answer에 +를 추가해준다.
  2. stack이 안비어있고, 스택의 가장 위와 원하는 숫자 (arr[index])가 같은 경우 pop 을 해준다.
  3. pop을 해주었기 때문에 인덱스 +=1 을 해주어 다음 숫자를 검사할수 있게 해준다.
  4. 반복 해준다.
  5. for문이 끝나고 stack이 남아있으면 No출력
  6. 아닌 경우 answer출력

'항해99 chap02' 카테고리의 다른 글

프린터 큐 - 큐  (0) 2022.01.21
카드2 - 큐  (0) 2022.01.21
괄호 - 스택  (0) 2022.01.21
중복 문자 제거 - 스택  (0) 2022.01.21
일일온도 - 스택  (0) 2022.01.21