본문 바로가기
백준알고리즘/브루트 포스

(Python/🥈5)백준 알고리즘 1018번 체스판 다시 칠하기

by windy7271 2022. 5. 23.
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을 사용 한 이유는

 행과 열의 인덱스의 합이 짝수인경우, 일정한 한 색을 가지게 되고, 홀수인 경우에도, 다른 일정한 한 색을 가지게 된다.

 

 

 

 

반응형

댓글