各黒マスが答えに寄与する値を求めることでこの問題を解くことが出来ます。 以下のステップをたどることでこの問題を解くことが出来ます。
ans を用意します。#) について考えます。ans を 加算します。つまり、そのマスは黒マスの図形の周囲に寄与しています。h, w = map(int,input().split())
S = []
for i in range(h):
s = list(input())
S.append(s)
ans = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def isvaild(x, y):
return 0 <= x < h and 0 <= y < w
for i in range(h):
for j in range(w):
if(S[i][j]=="#"):
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if(isvaild(nx, ny)):
if(S[nx][ny] == "."):
ans += 1
else:
ans += 1
print(ans)
#include<bits/stdc++.h>
using namespace std;
int main() {
int h, w;
cin >> h >> w;
vector<string> s(h + 2 , string(w + 2, '.'));
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
cin >> s[i][j];
}
}
int ans = 0;
for (int i = 0; i <= h; i++) {
for (int j = 0; j <= w; j++) {
if(s[i][j] != s[i][j + 1]) ans++;
if(s[i][j] != s[i + 1][j]) ans++;
}
}
cout << ans << endl;
}