問題文に言われた通りにシミュレーションする問題!
問題概要
長さ の文字列
があって、各文字は 'L' または 'R' である。
また、1 つのボールと、ボールを入れることができる箱 があって、最初ボールは箱 1 に入っている。文字列
の文字を順に見ていき、各文字に応じて次のように処理する。
- 'L' のとき:箱の数値が 1 小さいところにボールを移す (もともと箱 1 に入っているときは箱 1 のまま)
- 'R' のとき:箱の数値が 1 大きいところにボールを移す (もともと箱 3 に入っているときは箱 3 のまま)
回の処理を終えたあとの、ボールの入っている箱の番号を答えよ。
解法
問題文に書かれた通りの操作を実行しよう!
文字列 の文字を順に見ていくのは
for
文で次のように実装できる。
for (int i = 0; i < S; ++i) { if (S[i] == 'L') { // ボールを左に動かす } else { // ボールを右に動かす } }
また、ボールを左に動かす処理は次のように書ける。なお、動かす前にボールの入っている箱の番号を とする。
x = max(x - 1, 1);
これは、次の意味を持つ。基本的には x
を x - 1
に変えたいのだが、0 になってしまう場合は 1 のままにするので、max(x - 1, 1)
に置き換えている。
ボールを右に動かす処理も同様に書ける。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; string S; cin >> N >> S; int x = 1, res = 0; for (int i = 0; i < N; ++i) { if (S[i] == 'L') { x = max(x - 1, 1); } else { x = min(x + 1, 3); } if (x == 3) { ++res; } } cout << res << endl; }