# ์ถํ์ ์ค๋ฅธ์ชฝ, ์๋, ์ค๋ฅธ์ชฝ ์๋๋ฅผ ์ง์ ํ๊ธฐ ์ํ ์ขํ ๋ฆฌ์คํธ
d = [[1, 0], [0, 1], [1, 1]]
def solution(m, n, board):
# ํฐ์ง ๊ฐฏ์
answer = 0
# ๋ฃ๊ณ ๋นผ๊ธฐ ์ฝ๊ฒ x์ถ๊ณผ y์ถ์ ๋ฐ๊ฟ์ค๋ค
board = list(map(list, zip(*board)))
# ํฐํธ๋ฆฌ๊ณ -> ๋ฉ์ฐ๊ณ ๋ฅผ ํ ํ์ผ๋ก ํ ๋ ๋ช ํ์ ํด์ผํ๋ ์ง ๊ธฐ์ค์ด ๋๋ ๋ณ์, bang
bang = True
while bang:
# ์์ ์ํ๋ ํฐ์ง์ง ์์ ๊ฒ์ผ๋ก ์ด๊ธฐํ ํ๋ค
bang = False
status = [[0 for __ in range(m)] for _ in range(n)]
# ์ ์ฒด๋ฅผ ํ์ด๋ณด๋ฉฐ ์ง์์ผํ ๋ธ๋ก์ 1๋ก ํ์ํด๋๊ธฐ ์ํ 2์ฐจ์ ๋ฆฌ์คํธ
for x in range(m-1):
for y in range(n-1):
# 2X2 ๊ตฌ์ญ์ด ๋ชจ๋ ๊ฐ์ ๋ชจ์์ธ์ง ํ์ธํ๋ค
if board[y][x]:
for _ in range(3):
if board[y][x] != board[y+d[_][1]][x+d[_][0]]:
break
# ๋ค ๊ฐ๊ฐ ๋ชจ๋ ๊ฐ๋ค๋ฉด ๋์ค์ ์ง์์ฃผ๊ธฐ ์ํ ํ์๋ฅผ ํ๋ค
# ์ด๋ฌํ ์ํฉ์ด ์ค๋ฉด ์ถํ ๋ธ๋ก์ ๋ด๋ ค์ฃผ๊ณ ๋ค์ ์งํํด์ผํ๊ธฐ ๋๋ฌธ์ bang์ true๋ก ๋ฐ๊พผ๋ค
else:
bang = True
status[y][x] = 1
for _ in range(3):
status[y + d[_][1]][x + d[_][0]] = 1
# ๋น ์ ธ์ผํ ๋ธ๋ก์ ๋นผ๊ณ ๊ทธ ์์ ๋น ๋ธ๋ก์ ์๋๋ค
for x in range(m):
for y in range(n):
if status[y][x]:
board[y].pop(x)
board[y].insert(0, 0)
answer += 1
return answer