๋ฐฑ์ค€ | Baekjoon

[๋ฐฑ์ค€][1018]์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ | ํŒŒ์ด์ฌ

sungkshon 2024. 12. 13. 22:27
๋ฐ˜์‘ํ˜•

๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

MxNํฌ๊ธฐ์˜ ๋ณด๋“œ๊ฐ€ ์žˆ๋‹ค.

์–ด๋–ค ์ •์‚ฌ๊ฐํ˜•์€ ๊ฒ€์€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” ํฐ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋‹ค.

์ด ๋ณด๋“œ๋ฅผ ์ž˜๋ผ์„œ 8x8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

์ฒด์ŠคํŒ์€ ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰์ด ๋ฒˆ๊ฐˆ์•„์„œ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.(๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์€ ๋‹ค๋ฅธ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.) ๋ณด๋“œ๊ฐ€ ์ฒด์ŠคํŒ์ฒ˜๋Ÿผ ์น ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์–ด์„œ, 8x8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ์ž˜๋ผ๋‚ธ ํ›„ ๋ช‡ ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•œ๋‹ค.

8x8ํฌ๊ธฐ๋Š” ์•„๋ฌด๋ฐ์„œ๋‚˜ ๊ณจ๋ผ๋„ ๋œ๋‹ค.

๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ผ.

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. ์ž…๋ ฅ์ฒ˜๋ฆฌN๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ฝ์–ด ๋ณด๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ์ฒซ ์ค„์— ๋ณด๋“œ์˜ ํฌ๊ธฐ N x M์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  3. 8x8 ์˜์—ญ์—์„œ ์น ํ•ด์•ผ ํ•  ์นธ ๊ณ„์‚ฐ (def count_repaint)๊ฐ ํŒจํ„ด์— ๋Œ€ํ•ด ํ˜„์žฌ ๋ณด๋“œ์™€ ๋น„๊ตํ•˜๋ฉฐ ์น ํ•ด์•ผ ํ•  ์นธ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  4. ๋‘ ํŒจํ„ด ์ค‘ ๋” ์ ์€ ์นธ์„ ์น ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  5. x,y๋Š” 8x8 ๋ณด๋“œ์˜ ์‹œ์ž‘ ์ขŒํ‘œ์ด๋‹ค.
  6. ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ 8x8 ์˜์—ญ ํƒ์ƒ‰๋ชจ๋“  ์‹œ์ž‘์ ์— ๋Œ€ํ•ด ์ตœ์†Ÿ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
  7. ๊ฐ€๋Šฅํ•œ ์‹œ์ž‘ ์ขŒํ‘œ( i,j)๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋ฉฐ ๊ฐ ์˜์—ญ์˜ ์น ํ•˜๊ธฐ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  8. ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๊ณ„์‚ฐํ•œ ํ›„ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ’ก์ฝ”๋“œ

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)

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

  1. ๋ฐ˜๋ณต๋ฌธ: (N-7) x (M-7) : ๊ฐ€๋Šฅํ•œ ์‹œ์ž‘์ ์˜ ๊ฐœ์ˆ˜
  2. 8x8์˜์—ญ ํƒ์ƒ‰: ๊ฐ ๋ฐ˜๋ณต์—์„œ 64(8x8) ์นธ์„ ๊ฒ€์‚ฌ

์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„:

O((N - 7) x (M-7) x 64) ์ตœ๋Œ€ N=M=50 ์ผ๋•Œ : O(43 x 43 x 64) = O(118,336)

๐Ÿ’ก ํ‹€๋ฆฐ ์ด์œ 

์ ‘๊ทผ๋ฐฉ์‹์ด ํ‹€๋ฆผ

๐Ÿ’ก ํ‹€๋ฆฐ ๋ถ€๋ถ„ ์ˆ˜์ • or ๋‹ค๋ฅธ ํ’€์ด

์ •๋‹ต ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๊ณต๋ถ€ํ•˜์˜€๋‹ค…

๋ฐ˜์‘ํ˜•