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

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

AtCoder ABC 062 B - Picture Frame (6Q, 灰色, 200 点)

こういう処理に慣れておくと、将来的に「番兵法」などにも使える。

問題概要

 H ピクセル、横  W ピクセルの画像があります。 各ピクセルは英小文字で表される。

この画像の周囲 1 ピクセルを # で囲んだものを出力してください。

制約

  •  1 \le H, W \le 100

考えたこと

下の図のように、縦  H+2、横  W+2 のグリッドを用意して、その全体を '#' で初期化しておき、その中央を埋めていくのが楽だと思われる。

コード

#include <bits/stdc++.h>
using namespace std;
                                 
int main() {
    // 入力
    int H, W;
    cin >> H >> W;
    vector<string> a(H);
    for (int i = 0; i < H; i++) cin >> a[i];

    // 縦 H+2、横 W+2 のグリッドを用意して、'#' で埋めておく
    vector<string> S(H+2, string(W+2, '#'));

    // 真ん中を埋めていく
    for (int i = 1; i < H+1; i++) {
        for (int j = 1; j < W+1; j++) {
            S[i][j] = a[i-1][j-1];
        }
    }

    // 出力する
    for (int i = 0; i < H+2; i++) cout << S[i] << endl;
}