반응형
풀이 언어 : PYTHON
풀이 방법 : 브루트포스
# White와 Black을 서로 체인지 시켜주는 함수
def switchWB(s) :
if s == "W" :
return "B"
elif s == "B":
return "W"
# 판의 크기 입력
n, m = map(int, input().split())
# 체스판 입력
Map = list()
for _ in range(n) :
Map.append(input())
# 정답으로 제출할 새로 색칠할 칸의 최솟값
min = 10000000000
for i in range(n-7) :
for j in range(m-7) :
# 모든 경우의 수를 순회하면서 8*8 크기를 한 판 잘라냄...
# 잘라낸 판에서 흰색으로 시작했을 때랑 검은색으로 시작했을 때
# 어느 쪽이 새로 칠할 칸의 수가 더 적은지 판단
repair_W = 0 # W로 시작했을 때의 새로 칠할 칸의 수
repair_B = 0 # B로 시작했을 때의 새로 칠할 칸의 수
first_W = "W"
first_B = "B"
for x in range(8) :
for y in range(8) :
# 8*8 크기의 판의 모든 칸을 순회
# 만일 W부터 시작했을 경우 다시 칠해야하는 경우를 카운트
if first_W != Map[i+x][j+y] :
repair_W += 1
# 만일 B부터 시작했을 경우 다시 칠해야하는 경우를 카운트
if first_B != Map[i+x][j+y] :
repair_B += 1
# W와 B는 한칸마다 서로 체인지
first_W = switchWB(first_W)
first_B = switchWB(first_B)
# 한 줄의 마지막 칸과 그 다음줄의 첫칸은 서로 같은 색이다
first_W = switchWB(first_W)
first_B = switchWB(first_B)
# 8*8 크기의 판에서 새로 고쳐야할 칸의 횟수 중 제일 최소값을 저장한다
if min > repair_W :
min = repair_W
if min > repair_B :
min = repair_B
print(min)
링크
반응형
'알고리즘' 카테고리의 다른 글
백준 10989번 수 정렬하기 3 (0) | 2021.09.16 |
---|---|
백준 1436번 영화감독 숌 (0) | 2021.09.14 |
백준 7568번 덩치 (0) | 2021.09.14 |
백준 1011번 Fly me to the Alpha Centauri (0) | 2021.09.09 |
백준 1316번 그룹단어 체커 (0) | 2021.09.06 |
댓글