二次元配列を見ていく問題
問題概要
次のような のグリッドが与えられる。各マスの文字は '.' や '#' である。
文字が '#' であるようなマスの個数を求めよ。
制約
考えたこと
今回のような入力は「長さ の文字列を 個格納した vector<string>
型の配列」で受け取るとよい(変数名を S
などとしよう)。
次のように受け取れる。
vector<string> S(H); for (int i = 0; i < H; ++i) cin >> S[i];
さて、二次元配列の上から 行目 (0-indexed)、左から 列目 (0-indexed) のマスを としよう。このとき、各マス を走査するのは、次のように書ける。
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; }