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

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

AtCoder ABC 248 A - Lacked Number (6Q, 灰色, 100 点)

よくある「集計処理」の問題!

問題概要

10 個の数字 0〜9 のうちから 1 つを除外した 9 個の数字からなる文字列  S が与えられる。

10 個の数字 0〜9 のうち、この文字列に含まれない数字を答えよ。

考えたこと

この手の問題では、次のような配列(バケットと呼ばれる)を考えるとよい。


  • exist[v] ← 文字列  S の中に数字  v が含まれるかどうか (True / False)

この配列 exist を作ってしまえば、あとは exist[i] = false となる  i を答えればよい。

コード

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

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

    vector<bool> exist(10, false);
    for (int i = 0; i < S.size(); i++) {
        exist[S[i] - '0'] = true;
    }

    for (int i = 0; i < 10; ++i) {
        if (!exist[i]) {
            cout << i << endl;
            break;
        }
    }
}