図解解説シリーズ
競技プログラミングを始めたばかりでAtCoderの解説やJOIの解説ではいまいちピンと来ない…という人向けに、図解を用いて解説を行います。
問題文
情報オリンピック日本委員会に掲載されている問題
AtCoderに掲載されている問題
入出力など実際に確認して自分の作成したプログラムを採点することができます。
図解解説
今年度の一次予選のC問題は、以下の4つのスキルを確認する問題になっています。
1.入力・出力を正しく利用できる
2.算術演算子を正しく利用できる
3.条件分岐(if)を正しく利用できる
4.繰り返し処理を正しく利用できる
問題文を整理するために、具体的な数字を用いて、図示して考えてみます。
Pythonでの文字列は、1文字ごとに先頭から0,1,2,3,…と番号が割り当てられています。したがって、先頭の文字は「変数名[0]」と指定して取り出すことができます。この仕組みを利用して、この問題のルールと照らし合わせて整理をしていきます。
まず、ルールを確認します。1回目は先頭から2文字目を確認します。もし、2文字目がJなら、1文字目の文字を表示します。次に、2回目は先頭から3文字目を確認します。もし、3文字目がJなら、2文字目の文字を表示します。つまり、先頭からn文字目を確認し、n文字目がJなら、一つ手前の文字(n-1文字目)の文字を表示する…という操作を行っていきます。
具体的に入力例1を用いて考えてみます。1回目の操作は2文字目を確認します。2文字目はOなので、そのまま次の文字に移動します。2回目の操作は3文字目を確認します。3文字目はJなので一つ手前の文字である2文字目の文字Oを表示します。次に3回目の操作は4文字目を確認します。4文字目はOなので、そのまま次の文字に移動します。最終的に6文字目までこの操作を繰り返し行っていきます。
問題文のように一般化して考えると、『i+1文字目を確認し、i+1文字目がJなら、i文字目を表示する』ことになります。文字列の1文字目を指定するときは、上図の赤文字0を指定する必要がありますので、前述のiの値をいくつからいくつの値に設定すればよいでしょうか?
1回目では赤文字1を指定します。そのため、i=0を指定して1回目の操作を行えばよさそうです。最後は赤文字5を指定します。そのため、i=4を指定して最後の5回目の操作を行えばよさそうです。操作の回数は文字列の文字数N=6から1減らしたN-1回指定すればよさそうです。
解答例
N = int(input())
S = str(input())
#繰り返し処理を「文字数-1回」行います。したがってrangeに指定する値はN-1です。
#文字の指定は0番目から始まりますので、1番目の文字(2文字目)から
#順番に確認を行い、Jと一致する場合は一つ手前の文字を表示する
for i in range(N-1):
if S[i+1]=='J':
print(S[i])
イラスト
スライド内で使用しているイラストはすべて「いらすとや」の素材を利用しています。