CS log
[๋ฐฑ์ค/python] 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ ๋ณธ๋ฌธ
๐๋ฌธ์
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๊ฐ ์ด๋ค. (๊ท์น์ฑ ๋ฐ๊ฒฌ)
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 4779๋ฒ : ์นธํ ์ด ์งํฉ (0) | 2024.08.09 |
---|---|
์ฌ๊ท recursive function (0) | 2024.08.09 |
Big O ๋ณต์ต (0) | 2024.04.08 |
[Python] split(), bool() ๋ฐ ๋ฐฑ์ค 1152 ๋ค๋ฅธ ํ์ด๋ฐฉ๋ฒ (0) | 2024.03.28 |
[Python] ๋ฌธ์ โ ์์คํค์ฝ๋ ๋ณํ (0) | 2024.03.27 |