728x90
반응형
문제 풀이:https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
풀이:
(N,M) = map(int,(input().split()))
# print(N,M)
chess = [] # 체스판
new = [] # count 해야할 갯수
for i in range (N): # 8x8짜리 chess 체스판 만들기
x = input()
chess.append(x)
# M,N 이 8 이상일 경우
for i in range(N-7): # 8*8 자르기위해 -7해줌
for j in range(M-7): #
W = 0 # w 로 색칠 해줘야하는 것 초기화
B = 0 # B 로 색칠 해줘야하는 것 초기화
for k in range(i,i+8): # 시작지점
for l in range(j,j+8): # 시작지점
if (k + l) % 2 == 0: # 짝수인경우
if chess[k][l] != 'W': # 시작 점이 블랙일때
W = W + 1 # 화이트 갯수 증가
if chess[k][l] != 'B':
B = B + 1
else: # 홀수 일때
if chess[k][l] != 'B': #
W = W + 1
if chess[k][l] != 'W':
B = B + 1
new.append(W)
new.append(B)
print(min(new))
# ((k+l)/2) 가 홀수 인 경우도 일정한 색을 가지고 짝수 인 경우도 일정한 색을 가진다
문제 이해 하는데도 엄청 오래 걸렸다. 왜 실버5인지 모르겠다.
이 문제에 핵심은 8*8로 무작위로 자르는 것 같다.
즉 i-7, 열로 j-7로 고정 시켜 잘라주고 색칠해야 하는 W,B를 0으로 초기화 해준다
고정시키고 난 후 포문으로 8*8 로 자른 후 (0,0)이 블랙으로 시작하는것과 화이트로 시작하는것 두 개 다 비교해서
색칠해야하는 블랙과,화이트 갯수를 리스트에 넣어 가장 적은 값을 프린트 해준다.
( k + l ) %2 == 0을 사용 한 이유는
행과 열의 인덱스의 합이 짝수인경우, 일정한 한 색을 가지게 되고, 홀수인 경우에도, 다른 일정한 한 색을 가지게 된다.
반응형
댓글