taiPyのお悩み解決ブログ

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

Javaの解答例まとめ:ABC081B - Shift only , AtCoder Beginners Selection

はじめに

自分用の備忘録です。

ABC081B - Shift only , AtCoder Beginners Selection

問題文

次のリンクを参照

ABC081B - Shift only , AtCoder Beginners Selection, https://atcoder.jp/contests/abs/tasks/abc081_b

解答例(自分作)

import java.util.*;

class Main {

    static int count = 0;
    static boolean flag = true;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] A = new int[N];

        for (int i = 0; i < N; i++) {
            A[i] = sc.nextInt();
        }

        while (flag) {
            // judge
            for (int i = 0; i < N; i++) {
                if (A[i] % 2 == 0) {
                    flag = true;
                } else {
                    flag = false;
                    break;
                }
            }

            if (flag) {
                count++;
                // caluculate
                for (int i = 0; i < N; i++) {
                    A[i] = A[i] / 2;
                }
            }

        }

        System.out.println(count);

    }
}

ポイント

staticでMainの外にcount, flag変数を置くこと。これをしないと、whileの中で値が参照できなかったりして、めんどくさいんだよね。

while分の中を説明すると、まずはすべての数字が2で割り切れることを確認する。もし、すべて2で割り切れなかったら、flagをfalseにして、ブレイク。 その次にもし、すべて2で割り切れる=flagがtrueなら、実際に2で割って、配列に割った後の値を格納する。