問題
問題文
英小文字からなる $3$ つの文字列 $S_1,S_2,S_3$ と、$1$、$2$、$3$ のみからなる文字列 $T$ が与えられます。
$T$ の各文字に対応する文字列を連結してできる文字列を出力してください。より厳密には、以下の指示にしたがって文字列を出力してください。
・$1 \le i \le ∣T∣$ を満たす整数 $i$ に対し、文字列 $s_i$ を次のように定める。
- $T$ の $i$ 文字目が $1$ のとき、$S_1$
- $T$ の $i$ 文字目が $2$ のとき、$S_2$
- $T$ の $i$ 文字目が $3$ のとき、$S_3$
・$s_1,s_2, \ldots ,s_{∣T∣}$ をこの順に連結してできる文字列を出力する。
制約
・$1 \le ∣S_1∣,∣S_2∣,∣S_3∣ \le 10$
・$1 \le ∣T∣ \le 1000$
・$S_1,S_2,S_3$ は英小文字からなる。
・$T$ は $1$、$2$、$3$ のみからなる。
回答
回答1 (AC)
いま、流行のマリトッツォです(が、問題名の由来がわかりませんでした...)。文字列 $T$ の各文字に対し、'1' ならば $S_1$ を、'2' ならば $S_2$ を、'3' ならば $S_3$ を出力していけば良いでしょう。各文字が chr 型になりますのでご注意ください。コードは以下のようになりました。
abc219b-1.cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
string s1, s2, s3, t;
cin >> s1 >> s2 >> s3 >> t;
for ( int i=0; i<(int)t.size(); i++ ) {
if ( t.at(i)=='1' ) {
cout << s1;
} else if ( t.at(i)=='2' ) {
cout << s2;
} else {
cout << s3;
}
}
}
調べたこと
AtCoder の解説 → 公式解説
回答1と同じ方針でした。$S_1,S_2,S_#$ を配列で保持すれば、場合分け (if 文) が不要になるとのこと。なるほど。
リンク
前後の記事
- 前の記事 → AtCoderログ:0118 - ABC 219 A