CS log

[๋ฐฑ์ค€/python] 1018 ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ ๋ณธ๋ฌธ

CS/Algorithm

[๋ฐฑ์ค€/python] 1018 ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

sj.cath 2024. 8. 4. 19:02

๐Ÿ“๋ฌธ์ œ

https://www.acmicpc.net/problem/1018

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

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

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

 

๐Ÿ“์ž…๋ ฅ

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

 

๐Ÿ“์ถœ๋ ฅ

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

 

๐Ÿ“ํ’€์ด ๋ฐฉ๋ฒ•

8*8 ์ฒด์ŠคํŒ์—๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

<์ฒซ ๋ฒˆ์งธ>

WBWBWBWB

BWBWBWBW

WBWBWBWB

BWBWBWBW

WBWBWBWB

BWBWBWBW

WBWBWBWB

BWBWBWBW

 

<๋‘ ๋ฒˆ์งธ>

BWBWBWBW

WBWBWBWB

BWBWBWBW

WBWBWBWB

BWBWBWBW

WBWBWBWB

BWBWBWBW

WBWBWBWB

 

8x8์˜ ์ž„์˜์˜ ๋ณด๋“œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์œ„์˜ ์ฒด์ŠคํŒ๊ณผ ๋ชจ๋“  ์นธ์„ ๋น„๊ตํ•ด๊ฐ€๋ฉด์„œ(brutally) ์„œ๋กœ ๋‹ค๋ฅธ ์นธ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์•Œ์•„๋‚ธ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์™€ ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์™€ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๊ฐ’์ด ์ •๋‹ต์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ๋ฅผ ์ „๋ถ€ ๋น„๊ตํ•  ํ•„์š”๋Š” ์—†๊ณ (์‹œ๊ฐ„๋ณต์žก๋„ ์ค„์ด๊ธฐ) ๋‘ ๋ฒˆ์งธ์™€ ๊ฒฝ์šฐ์™€ ์ƒ‰์ด ๋‹ค๋ฅธ ์นธ์˜ ๊ฐœ์ˆ˜ = 64 - (์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์™€ ์ƒ‰์ด ๋‹ค๋ฅธ ์นธ์˜ ๊ฐœ์ˆ˜) ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“์ฝ”๋“œ

import sys
chess=[['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']]
n,m = map(int,sys.stdin.readline().split())
total =n*m
board = []
for _ in range(n) :
    board.append(list(sys.stdin.readline().strip('\n')))
def check(a,b) :
    cnt = 0
    for i in range(8) :
        for j in range(8) : 
            if chess[i][j] == board[a+i][b+j] : cnt+=1
    return min(cnt, 64-cnt)
for i in range(n-7) :
    for j in range(m-7) :
        total = min(total,check(i,j))
print(total)

 

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

๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ์žˆ๋Š” ์ด์ค‘๋ฐ˜๋ณต๋ฌธ ๋•Œ๋ฌธ์— O(N^2)

 

๐Ÿ“Brute Force algorithm

๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ brutally(๋ฌด์ง€์„ฑ์œผ๋กœ) ๋‹ค ์„ธ์–ด๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ, ๊ทธ๊ฒƒ์„ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ’€์–ด์•ผํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š๋‹ค. โžก๏ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ™œ์šฉํ•ด ์ถ”์ •ํ•ด๋ณด์ž!

 

*์™œ n-7, m-7 ์ธ๊ฐ€?

์˜ˆ๋ฅผ ๋“ค์–ด n=9, m=9๋ผ๊ณ  ํ•˜๋ฉด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” 8*8 ์ •์‚ฌ๊ฐํ˜•์˜ ๊ฐœ์ˆ˜๋Š” 2๊ฐœ*2๊ฐœ ์ด๋‹ค. (๊ทœ์น™์„ฑ ๋ฐœ๊ฒฌ)

 

์ฐธ๊ณ  : https://growth-coder.tistory.com/87,

https://ittrue.tistory.com/60