タイミングよく1/27(土)開催のAtCoder Beginner Contest 338に参加できたので、反省などを書きます。
結果
1問目を1ミスからAC。解けたのはこの問題のみでした。
char型を勉強しなきゃとは思いつつ手付かずで、解けそうな最初の2題が両方とも(おそらく)char型を用いる問題だったため、かなり苦戦しました。
順位は8789位。最下位と思ってたけど、苦戦した方は多かったようです。
ですが初参加でレーティングが0だったので、1問解けたからか +6 となりました。
現在レーティング 6
1問目「Capitalized?」
char型だと分かっても、作るのが難しかった。
この手の問題は、いつもforで全チェックして出力する、という問題を解いていたからか、その結果を一言でっていうのが、慣れておらず・・・
最近知った数値に置き換えて判別するというやり方しか手数がなかったです。
しかし、何度やってもNoなのにYesが出ちゃってなんで〜〜〜と40分くらい格闘したりして、1度目の提出で半分くらいWA。
結局以下のコードでACになりました。
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String S = sc.nextLine(); char[] Ssplit = new char[S.length()]; for (int i = 0 ; i < S.length(); i++) { Ssplit[i] = S.charAt(i); } int m = 0; boolean result1 = Character.isUpperCase(Ssplit[0]); boolean result2; if (result1 == true) { for (int i = 1; i < Ssplit.length; i++) { result2 = Character.isLowerCase(Ssplit[i]); if (result2 == true) { m = m + 0; } else { m++; } } if (m == 0) { System.out.print("Yes"); } else { System.out.print("No"); } } else { System.out.print("No"); } } }
1問目はかかっても数分のつもりだったので、10分を過ぎてかなり焦って間違いも多発したし、支離滅裂な記述になってしまいました。残念。
解説にも、「この問題は人生最初のプログラミングとしてはやや大変でしょう」と書いており、やっぱ大変なんジャン・・
1文字目が大文字かどうかでまず場合分けするという点は良かったみたいです。
boolean ans = Character.isUpperCase(S.charAt(0)); for (int i = 1; i < S.length(); ++i) { ans &= Character.isLowerCase(S.charAt(i)); }
この書き方すごいですね。
見習えるんだろうか・・・
2文字目以降に1回でも小文字がきてしまったら、falseになってしまうので一生falseになってしまうという仕掛けでしょうか・・・