はまやんはまやんはまやん

hamayanhamayan's blog

Constructing a Number [HourRank 25 A]

https://www.hackerrank.com/contests/hourrank-25/challenges/constructing-a-number

N個の数がある。
この数を(各桁単位で)バラバラにして再構築することで1つの数を作る。
上手く再構築して3の倍数に出来るか判定せよ。

解法

3の倍数であるには「各桁の総和が3の倍数」を満たせばいい。
どのように再構築しても各桁の総和が変化することはないので、
全ての数の全ての桁の総和を求めて、3の倍数かどうか判定すればいい。

int N;
//---------------------------------------------------------------------------------------------------
void solve() {
    cin >> N;

    int sm = 0;
    rep(i, 0, N) {
        int x; cin >> x;
        while (x) {
            sm += x % 10;
            x /= 10;
        }
    }

    if (sm % 3 == 0) printf("Yes\n");
    else printf("No\n");
}
//---------------------------------------------------------------------------------------------------
void _main() {
    int T; cin >> T;
    rep(t, 0, T) solve();
}