[Algorithm] BOJ 5430, Python


📢質問する
善英は週末は用事がないので、新しいコミュニケーション言語を作りました.
AC電源は、整数配列を演算するために作成される言語です.
この言語には2つの関数R(反転)とD(破棄)がある.
関数Rは、配列内の数値の順序を反転させる関数であり、Dは、最初の数値を破棄する関数である.
配列が空で、Dを使用するとエラーが発生します.
を選択します.
たとえば、「AB」はAを実行し、Bを実行する関数です.
たとえば、「RDD」は配列を反転し、最初の2つの数字を破棄する関数です.
配列の初期値と実行する関数を指定する場合は、プログラムを作成して最終結果を取得します.
入力
第1行は、試験例の個数Tを与える.Tは最大100です.
各テストケースの最初の行には、実行する関数pが与えられる.
pの長さは1以上であり、100000未満である.
次の行は、配列内の数値nを与えます.(0 ≤ n ≤ 100,000)
次の行には[x 1,...,xn]として並べられた数字が与えられる.(1 ≤ xi ≤ 100)
試験例全体におけるpの長さの和nの合計は70万を超えない.
しゅつりょく
各テストケースについて、関数の結果を入力として所定の整数配列に出力します.
エラーが発生した場合はerrorを出力します.
🐱‍💻コード#コード#

from collections import deque
case = int(input())
func = ""
n = 0
err = False


for _ in range(case):
   func = input()
   n = int(input())
   # Reverse 해줄지 정하기 위해서 선언
   R = 0
   num = deque()
   li = input()[1:-1].split(',')
   for i in li:
       if i != '' and i != ",":
           num.append((i))
       else:
           pass
           
   for s in func:
   	# func에서 R의 개수를 세어서 Reverse해줄지 안해줄지 정함
       if s == 'R':
           R += 1
           # num.reverse(), 시간이 오래걸림
  
       if s == 'D':
           if num:
           # R이 짝수개라면 뒤집지않고 제거해주면 됨, pop()해줌
               if R % 2 == 1:
                   num.pop()
           # R이 홀수개라면 뒤집고 제거해줘야 함, popleft()로 해줌
               else :
                   num.popleft()
           else:
               err = True
               break
   if err:
       print("error")
       err = False
   else:
       if R % 2 == 1:
           print('[',end='')
           print(','.join(reversed(list(num))), end='')
           print(']')  
       else:
           num = ','.join(num)
           print('[',end='')
           print((num), end='')
           print(']')
に答える
入力した関数をRとDに分けてコミュニケーション言語で解くだけの簡単な問題です.
Rに遭遇した場合は、入力された配列を反転し、Dに遭遇した場合は削除します.
したがって、Rを数える個数は、Rが偶数個あれば反転()ではなく、奇数個あれば反転()と考える.
D削除中に配列が空の場合、errをtrueに変更して終了します.
🤔レビュー
    문제를 풀면서 많은 고민을 했다. 
    처음에는 R과 D를 구분해서 reverse()해주고, pop()해주는 방법으로 문제를 풀어봤다.
    시간초과가 되어서 알아보니 reverse()를 실행해 준다면 시간이 O(N)만큼 걸리게 되는데,
    reverse()가 자주 실행되면 시간초과가 되는 것 이었다..