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

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

AtCoder ARC 019 A - お買い物クライシス (6Q, 試験管灰色)

if 文を並べてもいいし、map を使ってもよさそう。

問題概要

文字列  S が与えられる。 S の各文字に対して、

  • O → 0
  • D → 0
  • I → 1
  • Z → 2
  • S → 5
  • B → 8
  • それ以外 → そのまま

という変換をして得られる文字列を答えよ。

コード (1):if 文

if 文を使って解いてみた。

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

int main() {
    string S;
    cin >> S;
    for (auto c : S) {
        if (c == 'O' || c == 'D') cout << 0;
        else if (c == 'I') cout << 1;
        else if (c == 'Z') cout << 2;
        else if (c == 'S') cout << 5;
        else if (c == 'B') cout << 8;
        else cout << c;
    }
    cout << endl;
}

コード (2):map

もう 1 つ、map を使って解いてみた。

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

int main() {
    map<char, char> conv = {
        {'O', '0'},
        {'D', '0'},
        {'I', '1'},
        {'Z', '2'},
        {'S', '5'},
        {'B', '8'}
    };

    string S;
    cin >> S;
    for (auto c : S) {
        if (conv.count(c)) cout << conv[c];
        else cout << c;
    }
    cout << endl;
}