taiPyのお悩み解決ブログ

日々の発見をまとめます!

Javaの解答例:B - Delimiter , トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)

はじめに

自分用の備忘録。いろいろ解法があったので。

問題文

次のリンクを参照ください。

atcoder.jp

解答例

自作。キャッチコピー「とりあえずリストに入れる」

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        List<String> inputStrings = new ArrayList<>();

        while (sc.hasNext()) {
            String capture = sc.next();
            inputStrings.add(capture);

            if (capture.equals("0")) {
                break;
            }
        }

        for (int i = inputStrings.size() - 1; i >= 0 ; i--) {
            System.out.println(inputStrings.get(i));
        }

    }

}

解説とポイント

リスト型を使うのがポイントですね!配列だと作成するときに要素の数を指定しないといけないのでそもそもこの問題に適していなかったりするんですよね。だからリストを使う必要がありました!

問題全体に共通することだと思うんですけど、少し詰まった時はどこでつまっているのか。じゃあそれを解決するためにどんな策が取れるのか。三つぐらい考えてみる。そして、一つ一つ試すとそのうちのどれかがうまくいく。その結果問題が解けたみたいなことが多い、そんな気がします!

解答例 2 公式C++回答をJavaに

下記リンクで解説されていたコードC++をJavaに直したものです。

atcoder.jp

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Integer> a = new ArrayList<>();
        while (true) {
            int ca = scanner.nextInt();
            a.add(ca);
            if (ca == 0) {
                break;
            }
        }
        for (int i = a.size() - 1; i >= 0; i--) {
            System.out.println(a.get(i));
        }
    }
}

このJavaコードは、入力された整数をリストに追加し、0が入力されるとループを終了し、リストの内容を逆順に出力します。これは、元のC++コードと同じ動作をします。ただし、JavaではArrayListを使用してリストを作成し、Scannerを使用して入力を読み取ります。また、JavaではSystem.out.printlnを使用して出力を行います。このコードは、Javaの標準ライブラリを使用していますので、追加のライブラリのインポートは必要ありません。

参考文献

atcoder.jp