[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を出力します.
🐱💻コード#コード#
入力した関数をRとDに分けてコミュニケーション言語で解くだけの簡単な問題です.
Rに遭遇した場合は、入力された配列を反転し、Dに遭遇した場合は削除します.
したがって、Rを数える個数は、Rが偶数個あれば反転()ではなく、奇数個あれば反転()と考える.
D削除中に配列が空の場合、errをtrueに変更して終了します.
🤔レビュー
善英は週末は用事がないので、新しいコミュニケーション言語を作りました.
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()가 자주 실행되면 시간초과가 되는 것 이었다..
Reference
この問題について([Algorithm] BOJ 5430, Python), 我々は、より多くの情報をここで見つけました https://velog.io/@yewon/Algorithm-BOJ-5430-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol