taiPyのお悩み解決ブログ

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

Javaの解答例:B - Piano , ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)

はじめに

自分用の備忘録です。今回の問題の取り方としては十分に長い文字列を用意しちゃって数えるか方法と周期性を利用して解く方法の二通りがありますね。今回は周期性を利用して解法についてメモを残しています!

ポイント解説

12文字あって、それが連続しているってことなんですよね。今回の問題は。じゃあ、1文字目からの100文字と13文字目からの100文字って一緒じゃないですか。じゃあ、最初の12個だけで判断すればええやん!ていう問題でした!

なので、大きく繰り返すのは12回繰り返す。あとは指定された長さ分、要するに、wが〇〇個、bが〇〇個の合計を内側のforで回したら大丈夫!

目次

問題文と公式解答

問題

atcoder.jp

公式解答

atcoder.jp

解答例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int w = scanner.nextInt();
        int b = scanner.nextInt();
        String t = "wbwbwwbwbwbw";

        for (int i = 0; i < t.length(); i++) {
            int Wcounter = 0, Bcounter = 0;
            for (int j = 0; j < w + b; j++) {
                if (t.charAt((i + j) % t.length()) == 'w') {
                    ++Wcounter;
                } else {
                    ++Bcounter;
                }
            }

            if (w == Wcounter && b ==Bcounter) {
                System.out.println("Yes");
                return;
            }
        }

        System.out.println("No");

    }
}