[アルゴリズム]-Back Jun 1874(Stack)


問題のソース
http://academy.dream-coding.com
コード#コード#
n = int(input())
stack = []
ans = []
chk = 1
j = 0
for i in range(n):
    num = int(input())
    while chk <= num:
        stack.append(chk)
        ans.append("+")
        chk += 1
    if stack[-1] == num:
        stack.pop()
        ans.append("-")
    else:
        print("NO")
        j = 1
        break
if j == 0:
    for i in ans:
        print(i)
メモ
これはStackを利用した問題です.ずっと問題を理解していなかったので、グーグルで検索してみました.
問題例に示すように、入力は[4,3,6,8,7,5,2,1]と考えられる.
まず1をスタックにプッシュします->[1]
4->[1,2,3,4]になるまで
ここに入力した配列のようにするには、上のstackで2回ポップアップするだけです->[4,3]
このようにpushとpop演算入力の数列の問題を完成させる.
アルゴリズムは上記のように理解できる.
上記のアルゴリズムでは、while文が入力されている場合、スタックの最後の要素がnumでない場合、完了できない問題になります.この論理で「NO」を出力する部分を処理すればよい.