1. 체스판 다시 칠하기
- 난이도
- 실버 5
- 시간 제한
- 2초
- 메모리 제한
- 128 MB
- 출처
A. 문제
- 실버 5
- 2초
- 128 MB
위 백준 사이트에 접속하여 문제를 확인해주세요.
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. 회고
풀이
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))
풀이
이런 방식으로 8x8 모양으로 리스트를 잘라서 검사를 해줘야한다.
말로 하는 것보다. 직접 보는게 편하다.
인공지능을 공부했다면, CNN이랑 비슷하다는 것을 느낄 수 있다. CNN과 다른점이라고는 윈도우를 하나의 값으로 압축하지 않는다는 점이다.
반성
- [2차원 리스트 슬라이싱] 방법을 몰랐었다. 막연히 pandas나 numpy처럼 하면 되겠지 하다가, 전혀 아니란걸 알게되었다.
결론
- 그래도 예전같았으면, 리스트 컴프리헨션조차 몰라서 2차원 리스트 슬라이싱을 이해하지 못했을텐데, 그래도 이번에는 좀 이해가 된다.
- 조금은 성장하는 느낌이 나서 좋다.
참고문헌
1018번: 체스판 다시 칠하기 (acmicpc.net). Baekjoon. (accessed Sep 6, 2021)
Ghost