[백준] 1018번 - 체스판 다시 칠하기

1. 체스판 다시 칠하기

A. 문제

위 백준 사이트에 접속하여 문제를 확인해주세요.

B. 내 답안


def check_matrix(matrix):  
    start_w_check = 0  
    start_b_check = 0  
    for i in range(8):  
        for j in range(8):  
            di = i%2  
            dj = j%2  
            # 0번째가 W일 때  
            if (di == 0 and dj == 0) or (di == 1 and dj == 1):  
                if matrix[i][j] == "W":  
                    start_w_check += 1  
                elif matrix[i][j] == "B":  
                    start_b_check += 1  
            elif (di == 0 and dj == 1) or (di == 1 and dj == 0):  
                if matrix[i][j] == "B":  
                    start_w_check += 1  
                elif matrix[i][j] == "W":  
                    start_b_check += 1  
    result = max(start_w_check, start_b_check)  
    # print(start_w_check, start_b_check)  
    # print(result) return (8*8)-result  
  
n, m = list(map(int, input().split()))  
array = []  
  
for i in range(n):  
    array.append(list(input()))  
  
check = ["W", "B"]  
move = [(-1, 0), (1, 0), (0, -1), (0, 1)]  
check_map = [[0] * m for _ in range(n)]  
answer = []  
  
n_i = n - 7  
m_j = m - 7  
# print(n_i, m_j)  
for i in range(n_i):  
    for j in range(m_j):  
        sample_matrix = [row[j:j+8] for row in array[i:i+8]]  
        # print(*sample_matrix, sep='\n')  
        answer.append(check_matrix(sample_matrix))  
  
print(min(answer))

a. 회고

풀이

이런 방식으로 8x8 모양으로 리스트를 잘라서 검사를 해줘야한다.

말로 하는 것보다. 직접 보는게 편하다.

인공지능을 공부했다면, CNN이랑 비슷하다는 것을 느낄 수 있다. CNN과 다른점이라고는 윈도우를 하나의 값으로 압축하지 않는다는 점이다.

반성

결론

  • 그래도 예전같았으면, 리스트 컴프리헨션조차 몰라서 2차원 리스트 슬라이싱을 이해하지 못했을텐데, 그래도 이번에는 좀 이해가 된다.
  • 조금은 성장하는 느낌이 나서 좋다.

참고문헌

1018번: 체스판 다시 칠하기 (acmicpc.net). Baekjoon. (accessed Sep 6, 2021)

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.