본문으로 바로가기

C092:工場のベルトコンベア

category TIL/Algorithm 2024. 4. 27. 22:55

あなたは PIAZA 工場の工場長です。PIAZA 工場にはベルトコンベアが 2 つあり、その 2 つでたくさんの部品を必要な場所に送り届けています。

ベルトコンベアには、3 方向に分岐する地点があります。同時に複数の方向に進むことはできず、進むことのできる方向を示す信号機によって制御されています。

信号機にはスケジュールがあり、スケジュールに従ってベルトコンベアは、進むことのできる方向に進みます。

ベルトコンベアに乗っている部品は事前に進む方向が決められています。ベルトコンベアの先頭の部品の進みたい方向と信号機の示す方向が一致している場合その部品は進むことができますが、一致しない場合は信号機の示す方向が一致するまで進めません。また、1 つの部品が進むのと同じ時間で信号機はスケジュールにしたがって変わり、1 つのベルトコンベアで複数の部品を一度に送ることはできませんが、ベルトコンベア A、ベルトコンベア B はそれぞれ 1 つずつ送ることができます。

あなたは、運ぶことのできなかった部品がどれくらいあるか調べることになりました。

信号機のスケジュールと、2 つのベルトコンベアに乗っている部品それぞれの進みたい方向が与えられるので、全てのスケジュールが終わった後、それぞれのベルトコンベアにいくつ部品が残っているかを出力するプログラムを作成してください。

入力例 1 では以下のようになります。

最初のスケジュールは、右なので、1 つ目のベルトコンベアの部品は進むことができますが、 2 つ目のベルトコンベアの部品は進むことができません。
評価ポイント10回のテストケースで、正答率、実行速度、メモリ消費量をはかり得点が決まります。
より早い解答時間で提出したほうが得点が高くなります。
  1. 複数のテストケースで正しい出力がされるか評価(+50点)
  2. 解答までの速さ評価(+50点)
入力される値

入力は以下のフォーマットで与えられます。

N A B
s_N
s_A
s_B
  • ・1 行目に信号機のスケジュールの長さを表す整数 N、ベルトコンベア A に乗っている部品の数を表す整数 A、 ベルトコンベア B に乗っている部品の数を表す整数 B がこの順で半角スペース区切りで与えられます。
  • ・続く 3 行には、信号機のスケジュール、1 つめのベルトコンベアのそれぞれの部品の進む方向、2 つめのベルトコンベアのそれぞれの部品の進む方向を表す文字列 s_N, s_A, s_B が与えられます。
  • ・入力は合計で 4 行となり、入力値最終行の末尾に改行が 1 つ入ります。

それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください
期待する出力信号機のスケジュールが全て終了した時、 2 つのベルトコンベアに残っている部品の数を以下の形式で出力してください。

x y
・期待する出力は 1 行からなります。
・それぞれベルトコンベア A に残っている部品の数、ベルトコンベア B に残っている部品の数を表す整数 x, y をこの順で半角スペース区切りで出力してください。
・末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件

すべてのテストケースにおいて、以下の条件をみたします。

  • ・1 ≦ N, A, B ≦ 100
  • ・(s_N の長さ) = N
  • ・(s_A の長さ) = A
  • ・(s_B の長さ) = B
  • ・s_N, s_A, s_B は、"F", "R", "L" からなる文字列
  • ・"F" は直進、"R" は右折、"L" は左折を意味する。
入力例1
5 3 2
RRLFL
RFR
LR
出力例1
1 1
入力例2
3 3 3
LLL
LLL
FFF
出力例2
0 3
入力例3
4 3 3
RLRF
RRL
RLF
出力例3
1 0
入力例4
5 3 2
RRLLF
RRL
RL
出力例4
0 0

0

信号機の示す方向が一致している場合

方向が決められています

事前に

3 方向に分岐する地点があります

必要な場所に送り届けています

# 5 3 2
# RRLFL
# RFR
# LR
N, A, B = map(int, input().split())
# print(N, A, B)
light = input()
# print(light)
stuff_list = [list(input()) for i in range(2)]
# print(stuff_list)
for i in light:
    if len(stuff_list[0]) != 0:
        if i == stuff_list[0][0]:
            stuff_list[0].pop(0)
    if len(stuff_list[1]) != 0:
        if i == stuff_list[1][0] != 0:
            stuff_list[1].pop(0)
# print(stuff_list[0],stuff_list[1])
print(len(stuff_list[0]),len(stuff_list[1]))

'TIL > Algorithm' 카테고리의 다른 글

C131:ユニークな部屋番号  (0) 2024.04.30
C133:雷危険地域  (0) 2024.04.28
C032:お得な買い物 ???  (0) 2024.04.26
C094:国民の税金  (0) 2024.04.25
C059:パリティチェック  (0) 2024.04.24