問題
深く考えすぎて全くわからず!
意外と単純な問題らしい...
こういうのを三角形として捉えなくてよいようです。
下記は多角形として捉えたらよいようです。
解き方
自身の位置から自分の位置、左、左上、上をみて#
になっていたらその数をカウントします。
その数をmod2して奇数か偶数かどうかで角になっているかどうか判定します。
こんな感じです。
これを続けると下記のような場合に#のカウント数が奇数になります。
奇数になった数を答えとしてカウントすれば、それすなわち角とみなし、printすればOK.
コード
import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int h = sc.nextInt(); int w = sc.nextInt(); char[][] s = new char[h][w]; for(int i=0; i<h; i++) { s[i] = sc.next().toCharArray(); } sc.close(); int ans = 0; for(int i=1; i<h; i++) { for(int j=1; j<w; j++) { int cnt = 0; if(s[i][j] == '#') cnt++; if(s[i-1][j] == '#') cnt++; if(s[i][j-1] == '#') cnt++; if(s[i-1][j-1] == '#') cnt++; if(cnt % 2 == 1) ans++; } } System.out.println(ans); } }