図解解説シリーズ
競技プログラミングを始めたばかりでAtCoderの解説やJOIの解説ではいまいちピンと来ない…という人向けに、図解を用いて解説を行います。
問題文
情報オリンピック日本委員会に掲載されている問題
AtCoderに掲載されている問題
入出力など実際に確認して自分の作成したプログラムを採点することができます。
図解解説
今年度の一次予選のC問題は、以下の4つのスキルを確認する問題になっています。
1.入力・出力を正しく利用できる
2.算術演算子を正しく利用できる
3.条件分岐(if)を正しく利用できる
4.繰り返し処理を正しく利用できる
問題文を整理するために、具体的な数字を用いて、図示して考えてみます。
Pythonでの文字列は、1文字ごとに先頭から0,1,2,3,…と番号が割り当てられています。したがって、先頭の文字は「変数名[0]」と指定して取り出すことができます。この仕組みを利用して、文字列の先頭から1文字ずつ順番にRと一致するか確認し、Rの個数を数え上げていきます。
最終的にRの個数が、赤組の人数と一致するかどうか確認し、一致する場合は赤組の枠が全部埋まっているので葵さんは白組、一致しない場合は赤組の枠が余っているので葵さんは赤組になります。
解答例
解説で説明した解答例
N = int(input())
K = int(input())
S = str(input())
#赤組を示すRの個数を数えるための変数(aka)を用意して、文字列(S)の先頭からRの個数を数えます
#文字列Sの長さはN-1(葵さんの組み分けデータがないため)である点に注意が必要です
aka = 0
for i in range(N-1):
if S[i]=='R':
aka += 1
#赤組の個数(aka)と赤組の人数(K)が同じだったら葵さんは白組、違ったら赤組を表示します
if aka==K:
print('W')
else:
print('R')
Pythonの機能を使った例
効果的に機能を活用すると、アルゴリズムを簡単にすることができます。
N = int(input())
K = int(input())
S = str(input())
#文字列Sの中に含まれる赤組Rの数を数え、
#赤組の人数(K)と同じだったら葵さんは白組、違ったら赤組を表示します
if S.count('R')==K:
print('W')
else:
print('R')
イラスト
スライド内で使用しているイラストはすべて「いらすとや」の素材を利用しています。