๋ด์ฐ๋ฆฌ์ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ๋ก์ ์ธ๋ก๊ฐ ๊ฐ๊ฐ 1์ดํ ๊ฑฐ๋ฆฌ์ ์๋ ๊ฐ์ ๋์ด์ ๊ฐ
์ธ์ ํ ๋ชจ๋ ๊ฐ๋ค์ด ๋ค ํ์ฌ ๋ด์ฐ๋ฆฌ์ ๋์ด๋ณด๋ค ๋ฎ์ ๋์ด์ธ ๊ฒฝ์ฐ
๊ทธ๋ฆผ์์ ํ๋์์ ์ธ์ ํ ๋์ด๋ฅผ ๊ฐ์ง ์ธ์ ํ ๊ฒฉ์๋ค์ ๋ฌถ์ ๊ฒ์ด๋ค.
์์ ๊ฒฝ์ฐ๋ ์ฃผ๋ณ์ ๋์ด 3์ด ์๊ธฐ ๋๋ฌธ์ ๋ด์ฐ๋ฆฌ๊ฐ ๋ ์ ์๋ค. ํ์ง๋ง ๋ฐ์ ๊ฒฝ์ฐ๋ ์ฃผ๋ณ์ 0๊ณผ 1๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๋ด์ฐ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
์ด ๋ฌธ์ ์ ํต์ฌ์ ๊ฐ์ ๋์ด์ ์ธ์ ํ ๊ฒฉ์๋ค์ ์ฐพ๊ณ , ์ธ์ ํ ๊ฒฉ์ ์ค ๋ ๋์ ๋์ด๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ ๊ทธ๋ํ ํ์์ด๋ค. ๋๋น ์ฐ์ ํ์์ผ๋ก ์งํํ์ผ๋ฉฐ, ๊ฐ์ ๋์ด๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ ํ์ ๋ฃ๊ณ ํ์์ ์งํํ๊ณ , ๋ ๋์ ๋์ด๋ฅผ ํ์ํ๋ ๊ฒฝ์ฐ flag
์ False
๊ฐ์ ๋ฃ์๋ค. ์ต์ข
์ ์ผ๋ก ๋ด์ฐ๋ฆฌ์ ๊ฐ์๋ฅผ ์ธ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ flag
๊ฐ์ ๋ฐํํ๊ณ ๋ฐํ๋ ๊ฐ์ cnt
์ ๋ํ๋ ์์ผ๋ก ๊ฐ์๋ฅผ ์
๋ค.
์ธ์ ํ ๊ฐ ํ์ ์ค ๋ ๋์ ๋์ด๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ ๊ฐ์ ์๊ด์์ด ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ์ฃผ์ํด์ผ ํ๋ค.
# ๋์ฅ ๊ด๋ฆฌ
def bfs(_i, _j, x):
flag = True
visited[_i][_j] = True
queue = [(_i, _j)]
while queue:
i, j = queue.pop(0)
for di, dj in dij:
ni, nj = i+di, j+dj
if -1<ni<N and -1<nj<M:
if arr[ni][nj] > arr[i][j]:
flag = False
elif not visited[ni][nj] and arr[ni][nj] == x:
visited[ni][nj] = True
queue.append((ni, nj))
return flag
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
visited = [[False]*M for _ in range(N)]
dij = [(-1, 0), (0, 1), (1, 0), (0, -1), (1, 1), (1, -1), (-1, 1), (-1, -1)]
cnt = 0
for i in range(N):
for j in range(M):
if not visited[i][j]:
cnt += bfs(i, j, arr[i][j])
print(cnt)