1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

๋ฌธ์ œ

์ง€๋ฏผ์ด๋Š” ์ž์‹ ์˜ ์ €ํƒ์—์„œ MN๊ฐœ์˜ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” Mร—N ํฌ๊ธฐ์˜ ๋ณด๋“œ๋ฅผ ์ฐพ์•˜๋‹ค. ์–ด๋–ค ์ •์‚ฌ๊ฐํ˜•์€ ๊ฒ€์€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” ํฐ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์ด ๋ณด๋“œ๋ฅผ ์ž˜๋ผ์„œ 8ร—8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

์ฒด์ŠคํŒ์€ ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰์ด ๋ฒˆ๊ฐˆ์•„์„œ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ฐ ์นธ์ด ๊ฒ€์€์ƒ‰๊ณผ ํฐ์ƒ‰ ์ค‘ ํ•˜๋‚˜๋กœ ์ƒ‰์น ๋˜์–ด ์žˆ๊ณ , ๋ณ€์„ ๊ณต์œ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์€ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ •์˜๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ฒด์ŠคํŒ์„ ์ƒ‰์น ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘ ๊ฐ€์ง€๋ฟ์ด๋‹ค. ํ•˜๋‚˜๋Š” ๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋Š” ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ์ด๋‹ค.

๋ณด๋“œ๊ฐ€ ์ฒด์ŠคํŒ์ฒ˜๋Ÿผ ์น ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์–ด์„œ, ์ง€๋ฏผ์ด๋Š” 8ร—8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์œผ๋กœ ์ž˜๋ผ๋‚ธ ํ›„์— ๋ช‡ ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ์น ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ 8*8 ํฌ๊ธฐ๋Š” ์•„๋ฌด๋ฐ์„œ๋‚˜ ๊ณจ๋ผ๋„ ๋œ๋‹ค. ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋ฏผ์ด๊ฐ€ ๋‹ค์‹œ ์น ํ•ด์•ผ ํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1

8 8
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBBBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW

์˜ˆ์ œ ์ถœ๋ ฅ 1

1

ํ…Œ์ŠคํŠธ ๊ฐ’ ์ƒ์„ฑ๊ธฐ

color=["B","W"]
board_1 = [[color[::y][x%2] for x in range(8)] for y in [1,-1,1,-1,1,-1,1,-1]]
board_2 = [[color[::y][x%2] for x in range(8)] for y in [1,-1,1,-1,1,-1,1,-1][::-1]]
board_1,board_2

([['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B']],
 [['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'],
  ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'],
  ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W']])

#๋ณด๋“œ 2๋Š” ํ•„์š”์—†์Œ-๊ฒฐ๊ณผ ๋ฐ˜์ „์œผ๋กœ ํ•ด๊ฒฐ
#๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ?
#์ถ”๊ฐ€ ์ค„๋งŒ ๋น„๊ตํ•˜๊ณ  ๊ธฐ์กด์€ ๋‹ต ๋ฐ˜์ „ํ•ด์„œ ๋”ํ•จ.

๊นจ๋‹ฌ์Œ 1. ์ฒด์ŠคํŒ ํƒ€์ž… 1์˜ ๊ฐ’์„ ๊ตฌํ•˜๋ฉด 2์˜ ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๊ณ  ์ตœ์†Œ๊ฐ’๋งŒ ์•Œ๋ฉด ๋œ๋‹ค.

1๊ฐ€์ง€ ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๋‹ต ๋ฐฐ์—ด์„ ํ‹€๋ฆฌ๋ฉด 0,๋งž์œผ๋ฉด 1์ธ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ณ ,

8*8๋กœ ์ž˜๋ผ์„œ ๋งž์€ ์ˆ˜, 64-๋งž์€ ์ˆ˜ ์ค‘ ์ž‘์€ ์ˆ˜๋ฅผ ์ทจํ•จ.

import sys
h, w = (int(x) - 7 for x in input().split())
raw = sys.stdin.readlines()
board = [list(l.rstrip()) for l in raw]

result = []
base = ["B","W"]
for y,line in enumerate(board):
    newline=[]
    for x,cell in enumerate(line):
        if cell == base[(x+y)%2]:
            newline.append(1)
        else:
            newline.append(0)
    result.append(newline)

diff = 64
for y in range(h):
    for x in range(w):
        corr = 0
        for l in result[y:y+8]:
            corr += sum(l[x:x+8])
        if diff> min(corr,64-corr):
            diff = min(corr,64-corr)
print(diff)

๋งž์•˜์Šต๋‹ˆ๋‹ค.๐Ÿ˜Š ๊ทธ๋Ÿฐ๋ฐโ€ฆโ€ฆ

์ค‘๋ณต ์—ฐ์‚ฐ์ด ๋ณด์ด๋Š”๋ฐ 8*8์„ ๋งค๋ฒˆ ๋”ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ x๋ฐฉํ–ฅ์œผ๋กœ 1 ์ด๋™ํ•˜๋ฉด ์ฒซ ์—ด๋งŒํผ ๋นผ๊ณ  ์ƒˆ ์—ด์˜ ํ•ฉ๋งŒํผ ๋”ํ•˜๊ณ ,

y ๋ฐฉํ–ฅ์œผ๋กœ 1 ์ด๋™ํ•˜๋ฉด ์ด์ „ ๊ฐ’์—์„œ ์ฒซ ํ–‰๋งŒํผ ๋นผ๊ณ  ์ƒˆ๋กœ์šด ํ–‰์„ ๊ณ„์‚ฐํ•ด์„œ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.


cumulative_sums = []
for x in range(w):
    cumulative_col = []
    cumulative_sum = 0
    for y in range(h):
        cumulative_sum += result[y][x]
        cumulative_col.append(cumulative_sum)
    cumulative_sums.append(cumulative_col)

diff = 64
for y in range(h - 7):
    for x in range(w - 7):
        corr = 0
        for dx in range(8):
            # ์œ„์ชฝ ํ–‰ ๊ฐ’ ๋นผ๊ณ  ์•„๋ž˜์ชฝ ํ–‰ ๊ฐ’ ๋”ํ•˜๊ธฐ
            corr += cumulative_sums[x + dx][y + 7]
            if y > 0:
                corr -= cumulative_sums[x + dx][y - 1]
        if diff > min(corr, 64 - corr):
            diff = min(corr, 64 - corr)

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
diff