짱해커가 되어보자

boj 1018 본문

프로그래밍_일반/백준

boj 1018

Spadework 2020. 1. 27. 22:27

문제

N * M 보드가 존재하며, 각 칸은 검은색 or 흰색으로 칠해져 있다. 이 보드를 잘라서 8*8 크기의 체스판으로 만들려고 한다. 체스판으로 만들기 위해 칸의 색을 다시 칠할 수 있다


N, M : 8 ~ 50

 

입력 : n, m, 체스판([n][m])
출력 : N(8*8로 자른 후 칠을 가장 적게 할 수 있는 횟수)

풀이

8*8칸을 짜를 수 있는 모든 이중 반복을 : i(0, N-8), j(0, M-8)

- 반복을 수행하며 최솟값은 l[N-7][M-7]으로 생성한 리스트에 기록

 

 

8*8판을 기준으로 칠을 가장 적게 할 수 있는 횟수 : 처음 시작되는 패턴을 기반으로 8*8 칸으로 분석. 이후 최솟값은 p or 64-p 중 작은 값 반환

def p(b, n, m):
	s, c = b[n][m], 0
	for i in range(n, n+8):
		for j in range(m, m+8):
			if(s != b[i][j]): c += 1
			s = 'W' if s == 'B' else 'B'
		s = 'W' if s == 'B' else 'B'
	return min(c, 64-c)

n, m = map(int, input().split())
b = [list(input()) for _ in range(n)]
l = [[64]*(m-7) for _ in range(n-7)]

for i in range(n-7):
	for j in range(m-7):
		l[i][j] = p(b, i, j)

print(min(map(min, l)))

 

'프로그래밍_일반 > 백준' 카테고리의 다른 글

boj 1436  (0) 2020.01.28
boj 1181  (0) 2020.01.27
boj 11050  (2) 2020.01.27
boj 2798  (0) 2020.01.27
boj 2775  (0) 2020.01.27
Comments