ソートが使えるなら、それが楽だと思う
問題概要
6 桁の正の整数 が与えられる。 が次の条件を満たすかどうかを判定せよ。
- 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):ソートする方法
より簡単な方法として、
文字列 をアルファベット順にソートして、"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; }