Develop/Algorithm

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

proggg 2024. 10. 14. 23:14

 

 

์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ ๋ฌธ์ œ๋Š” brute force ์˜ ์‹œ์ž‘์„ ์•Œ๋ ค์ฃผ๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

 


 

๋ฌธ์ œ์ •์˜

 

1. N*M ๊ฐœ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ณด๋“œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

2. ์ด ์ค‘์—์„œ 8*8 ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ์ฒด์ŠคํŒ์„ ๋งŒ๋“œ๋ ค๊ณ  ํ•œ๋‹ค.

3. ์ฒด์ŠคํŒ์€ ํ•œ ์ •์‚ฌ๊ฐํ˜•์ด ๊ฒ€์€์ƒ‰์ด๋ผ๋ฉด ๋‹ค๋ฅธ ์ •์‚ฌ๊ฐํ˜•์€ ํฐ์ƒ‰์ด ๋‚˜์™€์•ผํ•œ๋‹ค.

4. N*M ๊ฐœ ์ค‘์—์„œ ์ž„์˜๋กœ 8*8 ํฌ๊ธฐ์˜ ๋ณด๋“œ๋ฅผ ๊บผ๋ƒˆ์œผ๋‹ˆ (3) ์„ ์–ด๊ธธ ์ˆ˜ ์žˆ๋‹ค.

5. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ฒด์Šค ํŒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์‹œ ์ƒ‰์„ ์น ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ผ.

 


์•„์ด๋””์–ด

1. ์ฒด์ŠคํŒ์˜ 8*8 ๋ณด๋“œ๋Š” [0][0] ์œ„์น˜์˜ ์ƒ‰์ด ๊ฒ€์ •์ƒ‰์ด๊ฑฐ๋‚˜ ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ ๋‘๊ฐ€์ง€์ด๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ด๊ฑฐ๋‚˜ ์•„๋ž˜์˜ ์ƒ‰์„ ๋ฐ”๊ฟ” [0][0] ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

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

 

2. ๊ทธ๋ ‡๋‹ค๋ฉด (1) ์˜ ์ „์ œ๋ฅผ ๊ฐ€์ง€๊ณ   ์ „์ฒด M*N ์˜ ๋ณด๋“œ์˜ [0][0] ๋ถ€ํ„ฐ 8by8 ์˜ ์œˆ๋„์šฐ๋ฅผ ๋งŒ๋“ค๋ฉฐ ์ƒˆ๋กœ ์ƒ‰์น ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค.

3. ์ƒˆ๋กœ ์ƒ‰์น ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณด๋“œ์™€ ์–ผ๋งˆ๋‚˜ ๋‹ค๋ฅธ ์ƒ‰์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. 

    - (1) ์— ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณด๋“œ๋Š” ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

for i in range(0,8):
	for j in range(0,8):

        if ref_board[i][j] == window_board[window_start_index+i][window_start_index+j]:
            cnt+=1
            
return min(cnt,64-cnt)

 

์˜ ์˜์‚ฌ์ฝ”๋“œ ์ •๋„๋กœ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

 


 

์ „์ฒด์ฝ”๋“œ

import sys
ref_board=[['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())


whole_board = []

res=n*m

for _ in range(n):
    whole_board.append(list(sys.stdin.readline().strip('\n')))
    
def window(x, y):
    cnt=0
    for i in range(8):
        for j in range(8):
            if chess[i][j]==whole_board[x+i][y+j]:
                cnt+=1
    return min(cnt, 64-cnt)
for i in range(n-7):
    for j in range(m-7):
        res=min(res, window(i, j))
print(res)

 

'Develop > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 1152) ๋‹จ์–ด์˜๊ฐœ์ˆ˜ [Python]  (0) 2024.09.04
๋ฐฑ์ค€ 10890) ์•ŒํŒŒ๋ฒณ ์ฐพ๊ธฐ [Python]  (0) 2024.08.24