[๋ฐฑ์ค][1018]์ฒด์คํ ๋ค์ ์น ํ๊ธฐ | ํ์ด์ฌ
๐ก๋ฌธ์ ๋ถ์ ์์ฝ
MxNํฌ๊ธฐ์ ๋ณด๋๊ฐ ์๋ค.
์ด๋ค ์ ์ฌ๊ฐํ์ ๊ฒ์์์ผ๋ก ์น ํด์ ธ ์๊ณ , ๋๋จธ์ง๋ ํฐ์์ผ๋ก ์น ํด์ ธ ์๋ค.
์ด ๋ณด๋๋ฅผ ์๋ผ์ 8x8 ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
์ฒด์คํ์ ๊ฒ์์๊ณผ ํฐ์์ด ๋ฒ๊ฐ์์ ์น ํด์ ธ ์์ด์ผ ํ๋ค.(๋ณ์ ๊ณต์ ํ๋ ๋ ๊ฐ์ ์ฌ๊ฐํ์ ๋ค๋ฅธ์์ผ๋ก ์น ํด์ ธ ์์ด์ผ ํ๋ค.) ๋ณด๋๊ฐ ์ฒด์คํ์ฒ๋ผ ์น ํด์ ธ ์๋ค๋ ๋ณด์ฅ์ด ์์ด์, 8x8 ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ์๋ผ๋ธ ํ ๋ช ๊ฐ์ ์ ์ฌ๊ฐํ์ ๋ค์ ์น ํด์ผ ํ๋ค.
8x8ํฌ๊ธฐ๋ ์๋ฌด๋ฐ์๋ ๊ณจ๋ผ๋ ๋๋ค.
๋ค์ ์น ํด์ผ ํ๋ ์ ์ฌ๊ฐํ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ผ.
๐ก์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
- ์ ๋ ฅ์ฒ๋ฆฌN๊ฐ์ ๋ฌธ์์ด์ ์ฝ์ด ๋ณด๋๋ฅผ ์์ฑํ๋ค.
- ์ฒซ ์ค์ ๋ณด๋์ ํฌ๊ธฐ N x M์ ์ ๋ ฅ๋ฐ๋๋ค.
- 8x8 ์์ญ์์ ์น ํด์ผ ํ ์นธ ๊ณ์ฐ (def count_repaint)๊ฐ ํจํด์ ๋ํด ํ์ฌ ๋ณด๋์ ๋น๊ตํ๋ฉฐ ์น ํด์ผ ํ ์นธ์ ์๋ฅผ ๊ณ์ฐํ๋ค.
- ๋ ํจํด ์ค ๋ ์ ์ ์นธ์ ์น ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐํํ๋ค.
- x,y๋ 8x8 ๋ณด๋์ ์์ ์ขํ์ด๋ค.
- ๋ชจ๋ ๊ฐ๋ฅํ 8x8 ์์ญ ํ์๋ชจ๋ ์์์ ์ ๋ํด ์ต์๊ฐ์ ๊ฐฑ์ ํ๋ค.
- ๊ฐ๋ฅํ ์์ ์ขํ( i,j)๋ฅผ ๋ชจ๋ ํ์ํ๋ฉฐ ๊ฐ ์์ญ์ ์น ํ๊ธฐ ํ์๋ฅผ ๊ณ์ฐํ๋ค.
- ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ์ฐํ ํ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ก์ฝ๋
n,m = map(int,input().split())
board = [input() for i in range(n)] #์ฒด์คํ์ ์
๋ ฅ๋ฐ๋๋ค.
def count_repaint(x, y): #x,y ๋ 8x8๋ณด๋์ ์์ ์ขํ์ด๋ค.
# (x,y)๋ฅผ ์์์ผ๋ก ํ๋ 8x8 ์์ญ์ ์ฒด์คํ ๋ ํจํด๊ณผ ๋น๊ตํ์ฌ ์ต์๋ก ๋ค์ ์น ํด์ผ ํ๋ ์นธ์ ๊ฐ์๋ฅผ ๊ณ์ฐ
pattern1, pattern2 = 0, 0 # ๊ท์น 1 : ๋งจ ์ผ์ชฝ ์ ์นธ์ด ๊ฒ์ (B)๋ก ์์/ ๊ท์น 2: ๋งจ ์ผ์ชฝ ์ ์นธ์ด ํฐ์(W)๋ก ์์
for i in range(8): #8x8์นธ์ ํ(์์๋) ํ์
for j in range(8): #8x8์นธ์ ์(์ผ์ค๋ฅธ์ชฝ) ํ์
#ํ์ฌ ์นธ์ ์๊ณผ ํจํด ๋น๊ต
if (i + j) % 2 == 0: #์ง์ ์นธ
if board [x+i][y+j] != 'B': #ํจํด 1์ B๋ก ์์
pattern1 +=1 # ๋ค์ ์น ํด์ผ ํจ
if board[x+i][y+j] != 'W': # ํจํด 2๋ w๋ก ์์
pattern2 +=1 # ๋ค์ ์น ํด์ผ ํจ
else: # ํ์ ์นธ
if board[x+i][y+j] != 'W': # ํจํด 1์ W๋ก ์์
pattern1 += 1
if board[x+i][y+j] != 'B': #ํจํด 2๋ B๋ก ์์
pattern2 += 1
# ๋ ํจํด ์ค ๋ ์ ์ ์นธ์ ์น ํ๋ ๊ฒฝ์ฐ ์ ํ
return min(pattern1, pattern2)
min_repaint = float('inf') #์น ํด์ผ ํ ์นธ์ ์ต์๊ฐ ์ด๊ธฐํ
# ๊ฐ๋ฅํ ๋ชจ๋ 8x8 ์์ญ์ ์์์ ํ์
for i in range(n-8+1): #ํ ์์์ ํ์
for j in range(m-8+1): # ์ด ์์์ ํ์
#(i,j)์์ ์์ํ๋ 8x8 ์์ญ์ ์ต์ ์น ํ๊ธฐ ๊ฐ ๊ฐฑ์
min_repaint = min(min_repaint, count_repaint(i,j))
# ์ต์ข
๊ฒฐ๊ณผ ์ถ๋ ฅ
print(min_repaint)
๐ก์๊ฐ๋ณต์ก๋
- ๋ฐ๋ณต๋ฌธ: (N-7) x (M-7) : ๊ฐ๋ฅํ ์์์ ์ ๊ฐ์
- 8x8์์ญ ํ์: ๊ฐ ๋ฐ๋ณต์์ 64(8x8) ์นธ์ ๊ฒ์ฌ
์ต์ข ์๊ฐ ๋ณต์ก๋:
O((N - 7) x (M-7) x 64) ์ต๋ N=M=50 ์ผ๋ : O(43 x 43 x 64) = O(118,336)
๐ก ํ๋ฆฐ ์ด์
์ ๊ทผ๋ฐฉ์์ด ํ๋ฆผ
๐ก ํ๋ฆฐ ๋ถ๋ถ ์์ or ๋ค๋ฅธ ํ์ด
์ ๋ต ์ฝ๋๋ฅผ ๋ณด๊ณ ๊ณต๋ถํ์๋ค…