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

- Author: @mildsalmon
- Published: 2021-09-06
- Updated: 2021-09-06
- Source: http://blex.me/@mildsalmon/%EB%B0%B1%EC%A4%80-1018%EB%B2%88-%EC%B2%B4%EC%8A%A4%ED%8C%90-%EB%8B%A4%EC%8B%9C-%EC%B9%A0%ED%95%98%EA%B8%B0
- Tags: 파이썬, 알고리즘, 코딩테스트, 문제, 백준, 브루트포스, 실버

---

# 1. 체스판 다시 칠하기

- 난이도
	- 실버 5
- 시간 제한
	- 2초
- 메모리 제한
	- 128 MB
- 출처
	- [1018번: 체스판 다시 칠하기 (acmicpc.net)](https://www.acmicpc.net/problem/1018)

### A. 문제

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

### B. 내 답안

```python

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. 회고

> 풀이

![](https://static.blex.me/images/content/2021/9/6/5_JmwGFquGilp6mQ57L1Po.jpg)

![](https://static.blex.me/images/content/2021/9/6/5_45jEG161w7wbepEOk8pu.jpg)

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

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

![](https://static.blex.me/images/content/2021/9/6/20_NGv8pU732LgpeMPd83DU.jpg)

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

![](https://static.blex.me/images/content/2021/9/6/20_Om7ispKP0A5lJ4WpcWXe.jpg)

![](https://static.blex.me/images/content/2021/9/6/20_OR2oyyiif1VtRptvu4xN.jpg)

> 반성

- [[2차원 리스트 슬라이싱]](https://blex.me/@mildsalmon/%ED%8C%8C%EC%9D%B4%EC%8D%AC-2%EC%B0%A8%EC%9B%90-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8B%B1) 방법을 몰랐었다. 막연히 pandas나 numpy처럼 하면 되겠지 하다가, 전혀 아니란걸 알게되었다.

> 결론

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

# 참고문헌

[1018번: 체스판 다시 칠하기 (acmicpc.net)](https://www.acmicpc.net/problem/1018). Baekjoon. (accessed Sep 6, 2021)
