はじめに
自分用の備忘録として。下記リンクのコンテストに出場しました!
モノグサプログラミングコンテスト2024(AtCoder Beginner Contest 345)
問題 A - Leftrightarrow
解答例 自分作
import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String S = sc.nextLine(); boolean flag = false; int biggerIndex = S.indexOf("<"); int lowerIndex = S.indexOf(">"); int counterOfEqual = 0; char[] charList = S.toCharArray(); for (int i = 0; i < charList.length; i++) { if (charList[i] == '=') { counterOfEqual ++; } } if (biggerIndex == 0 && lowerIndex == S.length() - 1 && counterOfEqual == S.length() - 2) { flag = true; } if (flag) { System.out.println("Yes"); } else { System.out.println("No"); } } }
解答例 自分作成 解説
このJavaコードは、ユーザーからの入力文字列S
が特定のパターンに一致するかどうかをチェックします。具体的には、文字列が<
で始まり、>
で終わり、その間に=
が連続しているかどうかを確認します。
以下に、各部分の詳細な説明を示します:
Scanner sc = new Scanner(System.in);
:ユーザーからの入力を読み取るためのScanner
オブジェクトを作成します。String S = sc.nextLine();
:ユーザーからの次の行を読み取り、それを文字列S
に保存します。int biggerIndex = S.indexOf("<");
とint lowerIndex = S.indexOf(">");
:文字列S
内の<
と>
の位置を探します。char[] charList = S.toCharArray();
:文字列S
を文字の配列に変換します。for (int i = 0; i < charList.length; i++) {...}
:文字列中の各文字をループします。ループ内で、文字が=
である場合、counterOfEqual
をインクリメントします。if (biggerIndex == 0 && lowerIndex == S.length() - 1 && counterOfEqual == S.length() - 2) {...}
:この条件文は、文字列が<
で始まり、>
で終わり、その間に=
が連続している場合に真となります。その場合、flag
をtrue
に設定します。if (flag) {...} else {...}
:flag
がtrue
であれば"Yes"を出力し、そうでなければ"No"を出力します。
したがって、このコードは、入力文字列が特定のパターン(<
で始まり、>
で終わり、その間に=
が連続している)に一致するかどうかを判断します。一致する場合は"Yes"を出力し、一致しない場合は"No"を出力します。このパターンは、AtCoder Beginner Contest 345のA - Leftrightarrow問題で使用されています。この問題では、特定の条件に一致する文字列を見つけることが求められています。
公式の解答をJavaに変換
以下は、C++からJavaへの変換です。このJavaコードは、与えられた文字列が次の条件を満たすかどうかをチェックします:
- 文字列は
<
で始まります。 - 文字列は
>
で終わります。 - 文字列の中間部分はすべて
=
で構成されています。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); int n = s.length(); if (!s.startsWith("<")) { System.out.println("No"); return; } if (!s.endsWith(">")) { System.out.println("No"); return; } for (int i = 1; i < n - 1; i++) { if (s.charAt(i) != '=') { System.out.println("No"); return; } } System.out.println("Yes"); } }
公式の解答をJavaに変換 解説
このJavaのコードは、モノグサプログラミングコンテスト2024(AtCoder Beginner Contest 345)の問題 A - Leftrightarrow を解くために書かれています。
問題の要件は、与えられた文字列が次の条件を満たすかどうかを判定することです:
- 文字列の先頭が
<
であること。 - 文字列の末尾が
>
であること。 - 文字列の中間部分がすべて
=
であること。
具体的には、与えられた文字列 s
の長さを n
として、以下のように判定しています:
s
の先頭が<
でない場合、No
を出力して終了します。s
の末尾が>
でない場合、同様にNo
を出力して終了します。s
の2番目からn - 2
番目までの各文字が=
でない場合、再びNo
を出力して終了します。
上記の条件をすべて満たす場合、Yes
を出力します。
このコードは、与えられた文字列が指定された条件を満たすかどうかを効率的に判定しています。
公式の解答をJavaに変換 その2
import java.util.*; class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); int n = s.length(); char[] charList = new char[n]; charList = s.toCharArray(); if (charList[0] != '<') { System.out.println("No"); return; } if (charList[n - 1] != '>') { System.out.println("No"); return; } for (int i = 1; i < n - 1; i++) { if (charList[i] != '=') { System.out.println("No"); return; } } System.out.println("Yes"); } }
公式の解答をJavaに変換 その2 解説
このJavaのコードは、モノグサプログラミングコンテスト2024(AtCoder Beginner Contest 345)の問題 A - Leftrightarrow を解くために書かれています。
問題の要件は、与えられた文字列が次の条件を満たすかどうかを判定することです:
- 文字列の先頭が
<
であること。 - 文字列の末尾が
>
であること。 - 文字列の中間部分がすべて
=
であること。
具体的には、与えられた文字列 s
の長さを n
として、以下のように判定しています:
charList[0]
が<
でない場合、No
を出力して終了します。charList[n - 1]
が>
でない場合、同様にNo
を出力して終了します。charList[1]
からcharList[n - 2]
までの各文字が=
でない場合、再びNo
を出力して終了します。
上記の条件をすべて満たす場合、Yes
を出力します。
このコードは、与えられた文字列が指定された条件を満たすかどうかを効率的に判定しています。
参考文献
A - Leftrightarrow 解説 by mechanicalpenciI, https://atcoder.jp/contests/abc345/editorial/9574
問題B