Ruteです。
AtCoder Beginner Contest 175 A問題「Rainy Season」の解説を行います。
#問題概要
"R"
が最大何文字連続しているかを出力しなさい。
##制約
・ $|S| = 3$
・$S$の各文字は'S'
または'R'
である
#解説
ls = []と定義します。
$S$を文字列として受け取ります。
now = 0とします。 これは後で利用します。
以下の様な繰返し処理を行います。
・もしS[i](Sのi文字目)
が"R"だった場合
now に1を加算します。
・そうでない場合
lsにnowの値を挿入し、nowの値を0とします。
最後に、lsに繰返し処理が終わった後のnowの値を挿入します。
lsにある数のうち、最大の数が答えなのでこれを出力すれば良いです。
もしくは、制約がかなり小さいので、全ての文字列について'R'
が何文字あるかどうかをあらかじめ計算して、条件分岐でその都度出力してもよさそうです。
#各言語解答例
Python3はループを用いる方法で、C++,Javaは全ての文字列で条件分岐する方法で解いてみました。
C++,Javaでループを用いる方法、Python3で全ての文字列で条件分岐する方法でもACすることは可能です。
Python3での解答例
S = input()
ls = []
now = 0
for i in range(3):
if S[i] == "R":
now += 1
else:
ls.append(now)
now = 0
ls.append(now)
print(max(ls))
C++での解答例
#include<bits/stdc++.h>
using namespace std;
int main(){
string S;
cin >> S;
if (S == "RRR"){
cout << 3 << endl;
}else if (S == "RRS"){
cout << 2 << endl;
}else if (S == "SRR"){
cout << 2 << endl;
}else if (S == "SRS"){
cout << 1 << endl;
}else if (S == "RSR"){
cout << 1 << endl;
}else if (S == "RSS"){
cout << 1 << endl;
}else if (S == "SSR"){
cout << 1 << endl;
}else{
cout << 0 << endl;
}
}
Javaでの解答例
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String s = scan.next();
if (s.equals("RRR")){
System.out.println(3);
}else if (s.equals("RRS")){
System.out.println(2);
}else if (s.equals("SRR")){
System.out.println(2);
}else if (s.equals("RSR")){
System.out.println(1);
}else if (s.equals("RSS")){
System.out.println(1);
}else if (s.equals("SRS")){
System.out.println(1);
}else if (s.equals("SSR")){
System.out.println(1);
}else{
System.out.println(0);
}
}
}
'=='
を使って文字列が同じかを比較すると、Javaの参照によって期待していた出力とは違う条件分岐となる可能性があります。詳しくはこちらをご覧下さい。