반응형
체스판 다시 칠하기
https://www.acmicpc.net/problem/1018
코드
import sys
N, M = map(int,sys.stdin.readline().split())
board = [[m for m in sys.stdin.readline().rstrip()] for _ in range(N)]
case1 = [[0 for _ in range(M)] for _ in range(N)]
case2 = [[0 for _ in range(M)] for _ in range(N)]
for n in range(N):
for m in range(M):
if (n+m)%2 == 0:
if board[n][m] == 'W': case2[n][m] = 1
else: case1[n][m] = 1
else:
if board[n][m] == 'W': case1[n][m] = 1
else: case2[n][m] = 1
answer = 50*50
for a in range(N-7):
for b in range(M-7):
white = sum([case1[i][j] for i in range(a,a+8) for j in range(b,b+8)])
black = sum([case2[i][j] for i in range(a,a+8) for j in range(b,b+8)])
answer = min(answer, white, black)
if answer == 0 : break
print(answer)
해설
1. 보드와 같은 크기로 2개의 배열을 만들기
하나의 경우는 좌측상단에 하얀색을 시작으로 칠하는 경우(case1)
다른 하나의 경우는 좌측상단에 검은색을 시작으로 칠하는 경우(case 2)
2. 보드를 전부다 확인하여 case1일 때 새로 칠해야 하면 해당 자리의 case1을 1로 변경함. case 2 또한 동시에 진행
3. 만들어진 case1, case 2를 8x8로 자를 수 있는 모든 경우의 수를 확인해 가장 적게 칠하는 경우를 찾아냄.
반응형
'알고리즘 테스트 > 백준' 카테고리의 다른 글
백준 10989 : 수 정렬하기3(카운팅정렬) (0) | 2022.01.30 |
---|---|
백준 2751 : 수 정렬하기2 (파이썬) (0) | 2022.01.29 |
백준 7568 : 덩치 (파이썬) (0) | 2022.01.28 |
백준 11729 : 하노이 탑 이동 순서 (파이썬) (0) | 2022.01.27 |
백준 2447 : 별 찍기 - 10 (파이썬) (0) | 2022.01.26 |