archive

[백준] 체스판 다시 칠하기 (Python) 본문

STUDY/알고리즘

[백준] 체스판 다시 칠하기 (Python)

seonyounggg 2021. 3. 8. 21:05

✏️ 문제

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

✏️ 풀이

완전탐색문제이다.

입력받은 이차원 배열을 8*8로 쪼갤 수 있는 모든 경우의 수에 대해,

각 칸의 색깔이 중복되지 않도록 하기 위해 색칠해야 할 칸의 개수를 구한다.

칸의 개수는 각각, w로 시작하는 경우 & b로 시작하는 경우로 만들기 위해 바꿔야 할 수를 구해

두 수 중 작은 것으로 선택한다.

✏️ 코드

def check_board(arr):
    count_w = 0
    count_b = 0

    # 짝수행 wbwb 홀수행 bwbw
    for i in range(8):
        for j in range(8):
            if i%2==0:
                if j%2==0:
                    if arr[i][j] == 'W':
                        count_b += 1
                    else:
                        count_w += 1
                else:
                    if arr[i][j] == 'B':
                        count_b += 1
                    else:
                        count_w += 1
            else:
                if j%2==0:
                    if arr[i][j] == 'B':
                        count_b +=1
                    else:
                        count_w += 1
                else:
                    if arr[i][j] == 'W':
                        count_b += 1
                    else:
                        count_w += 1

    return min(count_w,count_b)

# n : 세로, m : 가로
def main():
    n, m = map(int, input().split())
    board=[]
    for _ in range(n):
        line = list(input())
        board.append(line)

    min_cnt = n*m

    for i in range(0, n-8+1):
        temp = board[i:i+8]
        for j in range(0, m-8+1):
            arr = [row[j:j+8] for row in temp]
            cnt = check_board(arr)
            if cnt < min_cnt:
                min_cnt = cnt

    print(min_cnt)

main()

입력받은 이차원 배열을 8*8로 잘라, 칠해야 하는 칸 수를 구하도록 구현하였다.

✏️ 생각

문제 아이디어보다는 구현이 은근 까다로웠던 문제

이차원 배열의 인덱스는 늘 복잡해~~~

'STUDY > 알고리즘' 카테고리의 다른 글

[백준] 설탕 배달 (Python)  (0) 2021.03.08
[백준] 숫자 야구 게임 (Python)  (0) 2021.03.08
[백준] 분해합 (Python)  (0) 2021.03.08
[백준] 블랙잭 (Python)  (0) 2021.03.08
[백준] 수 정렬하기 3 (Python)  (0) 2021.03.08
Comments