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

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

AtCoder ABC 280 A - Pawn on a Grid (7Q, 灰色, 100 点)

二次元配列を見ていく問題

問題概要

次のような  H \times W のグリッドが与えられる。各マスの文字は '.' や '#' である。

文字が '#' であるようなマスの個数を求めよ。

制約

  •  1 \le H, W \le 10

考えたこと

今回のような入力は「長さ  W の文字列を  H 個格納した vector<string> 型の配列」で受け取るとよい(変数名を S などとしよう)。

次のように受け取れる。

vector<string> S(H);
for (int i = 0; i < H; ++i) cin >> S[i];

さて、二次元配列の上から  i 行目 (0-indexed)、左から  j 列目 (0-indexed) のマスを  (i, j) としよう。このとき、各マス  (i, j) を走査するのは、次のように書ける。

for (int i = 0; i < H; ++i) {
    for (int j = 0; j < W; ++j) {
        // マス (i, j) は S[i][j] と表せるので、それを調べる

    }
}

あとは、上記の二重 for 文の中身を埋めればよい。

コード

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

int main() {
    int H, W;
    cin >> H >> W;
    vector<string> S(H);
    for (int i = 0; i < H; ++i) cin >> S[i];

    int res = 0;
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            if (S[i][j] == '#') ++res;
        }
    }
    cout << res << endl;
}