[PS]Baek Jun#1406/編集

7289 ワード


アルゴリズムの問題を解く

  • リンク:編集
  • タイプ:자료구조스택
  • 解決:solved
  • 解法

  • 2つのリストを作成し、Aに入力された初期文字列Bに空のスタックがある.
  • カーソルを左に移動し、AポップアップしたデータをBスタックへプッシュ
  • 右カーソル反転動作
  • 削除と挿入はAで発生する.
  • 見逃した場所

  • 最初は、1つのリストをカーソル位置を格納するindex変数として変更した結果、タイムアウトした.
  • 이유:一覧表ではinsertが使用でき、1つのノードを挿入する場合、後ろのすべてのノードが1つずつ押し開く演算が必要となります.
  • カーソルを前後に分けて2つのリストに保存し、最後にクエリスタック部分を反転させるだけ.
  • ソースコード

    import sys
    input = sys.stdin.readline
    str = list(input().rstrip())
    N = len(str)
    M = int(input())
    commands = [ input().rstrip().split() for _ in range(M)]
    index = len(str)
    
    def execute(str, stack, cmd, char=None):
    
        if cmd == 'L' and str != []:
            stack.append(str.pop())
        if cmd == 'D' and stack != []:
            str.append(stack.pop())
        if cmd == 'B' and str != []:
            str.pop()
        if cmd == 'P':
            str.append(char)
    
    stack = []
    for c in commands:
        index = execute(str=str, stack=stack, cmd=c[0], char= c[1] if len(c) ==2 else None)
    
    print(''.join(str+stack[::-1]))