Baekjoon 5430.py [AC]


もし問題があったら?

説明する

import sys
from collections import deque
input = sys.stdin.readline


for _ in range(int(input())):
    func = input().rstrip()
    l = int(input())
    arr = input().rstrip()
    if l > 0:
        nums = deque(list(map(int, arr[1:-1].split(','))))
    else:
        nums = []
    leftPop = True
    result = True

    for i in func:
        if i == 'R' and leftPop:
            leftPop = False
        elif i == 'R' and not leftPop:
            leftPop = True
        elif i == 'D' and leftPop:
            if not nums:
                result = False
                break
            nums.popleft()
        elif i == 'D' and not leftPop:
            if not nums:
                result = False
                break
            nums.pop()

    if result:
        numsFinal = list(nums)
        if func.count('R') % 2 == 0:
            print('['+','.join(map(str, numsFinal))+']')
        else:
            print('['+','.join(map(str, numsFinal[::-1]))+']')
    else:
        print('error')

ふくガス


通常の入力とは異なり、デジタル入力は[1,2,3]のように入力され、処理するのに時間がかかる.deque(list(map(int, arr[1:-1].split(',')))) splitを使用してカンマを削除し、インデックススライドだけで数値を遮断します.
R反転リストを実装し、Dは一番前の要素を削除する必要があります.入力を受け取るたびに反転、削除を繰り返すとタイムアウトになる可能性があるので、Rが何回入ったかをTrue/Falseで確認しました.
奇数反転では最後尾の要素が削除され、偶数反転では最上位の要素が削除されます.そのため、listではなくdequeを使って時間を減らそうとした.
最後の出力では、dequeをnumsFinal[::-1]に反転して出力する必要がある場合があります.
  • リスト要素を反転する方法
    1. list[::-1]2. list.reverse()3. newList = reversed(list)
  • Rがfunc.count('R')を何回入力したかを確認し、上記で宣言したTrue/Felseを確認すれば、より多くの時間を減らすことができます.
  • count()の時間複雑度はO(n)
  • である.

    もう一つの謎を見て


    要素を左から右へ直接削除するのではなく、一度に計算する時間が短縮されます.