けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 380 A - 123233 (7Q, 灰色, 100 点)

ソートが使えるなら、それが楽だと思う

問題概要

6 桁の正の整数  N が与えられる。 N が次の条件を満たすかどうかを判定せよ。

  • 1 をちょうど 1 個含む
  • 2 をちょうど 2 個含む
  • 3 をちょうど 3 個含む

解法 (1):1, 2, 3 の個数を数える方法

for 文などを用いて、1, 2, 3 がそれぞれ何個あるかを数える方法が考えられる。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;

    int one = 0, two = 0, three = 0;
    for (auto c : S) {
        if (c == '1') one++;
        else if (c == '2') two++;
        else if (c == '3') three++;
    }

    if (one == 1 && two == 2 && three == 3) cout << "Yes" << endl;
    else cout << "No" << endl;
}

 

解法 (2):ソートする方法

より簡単な方法として、


文字列  S をアルファベット順にソートして、"122333" になるかどうか


を判定する方法が考えられる。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;
    sort(S.begin(), S.end());
    if (S == "122333") cout << "Yes" << endl;
    else cout << "No" << endl;
}