Baekjoon 5430.py [AC]
8759 ワード
もし問題があったら?
通常の入力とは異なり、デジタル入力は
R反転リストを実装し、Dは一番前の要素を削除する必要があります.入力を受け取るたびに反転、削除を繰り返すとタイムアウトになる可能性があるので、Rが何回入ったかをTrue/Falseで確認しました.
奇数反転では最後尾の要素が削除され、偶数反転では最上位の要素が削除されます.そのため、listではなくdequeを使って時間を減らそうとした.
最後の出力では、dequeをリスト要素を反転する方法
1. Rが count()の時間複雑度はO(n) である.
要素を左から右へ直接削除するのではなく、一度に計算する時間が短縮されます.
説明する
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)
func.count('R')
を何回入力したかを確認し、上記で宣言したTrue/Felseを確認すれば、より多くの時間を減らすことができます.もう一つの謎を見て
要素を左から右へ直接削除するのではなく、一度に計算する時間が短縮されます.
Reference
この問題について(Baekjoon 5430.py [AC]), 我々は、より多くの情報をここで見つけました https://velog.io/@hohooodo/Baekjoon-5430.py-ACテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol