https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
string 문자열을 그냥.. st = "abcd"로 선언하고 st[1]을 프린트하면 b가 출력되더라...?
2차원 배열을 리스트로 어떻게 구현해야 할까 고민했는데 그냥 리스트에 문자열을 통채로 넣으면 되는 거였다.
그 자체가 2차원 리스트라 말할 수 있다. 대신 특정 방법을 사용하지 않는 한 수정은 안되는 듯 하다.
너무 신기하고 기특한 파이썬...!ㅋㅋ
더 간추리는 방법이 있지만 가독성과 이해하기 쉬운 코드로 만들고 싶었다.
애초에 코드가 길어 그럴 수 있을지 모르겠지만..
리스트에 저장한 보드판, for문 두개로 8x8 체스판의 왼쪽위 꼭짓점을 정해준다.
모든 체스판은 왼위 꼭짓점이 B로 시작하며, 색칠이 필요한 개수를 8x8인 64에서 빼준 값이, 왼위 꼭짓점이 W로 시작할 때 색칠이 필요한 개수이다. 그러니 한쪽만 계산해주면 두 경우를 모두 비교할 수 있다.
밑으로 두칸씩, 오른쪽으로 두칸씩 이동하며 B인지, W인지 확인하는 방식이다. 1-2와 2-2의 시작점은 1이 더해져있다.
예를 들어 1-1이 홀수칸이 B인지 확인한다면, 1-2는 짝수칸이 W인지 확인한다.
for문이 많아 복잡해보이지만 이해한다면 그리 어렵지 않은.. 그래도 복잡한건 사실이다ㅋㅋ
이제 실버 등급인만큼 까다로운 문제가 시작된 것 같다..!
N, M = map(int, input().split())
board = []
result = 3000
for i in range(N):
board.append(input())
#왼꼭 기준 B로 설정하고, 다시 칠해야 하는 수 32개 넘으면 64에서 빼준다.
#8x8크기 설정하고 꼭짓점 정하는 for문 2개
for n in range(0, N-7): #세로, [n][m]이 체스판의 왼쪽 꼭짓점
for m in range(0, M-7): #M-8은 되야 우측으로 8칸 만족하니, range식으로는 M-7
count = 0
#1-1
for i in range(n, n+8, 2): #한줄씩 밑으로 건너뜀, 첫칸은 B
#2-1
for j in range(m, m+8, 2): #한칸씩 옆으로 건너뛰며 B인지 확인
if board[i][j]!="B":
count = count + 1
#2-2
for j in range(m+1, m+8, 2): #한칸씩 옆으로 건너뛰며 W인지 확인
if board[i][j]!="W":
count = count + 1
#1-2
for i in range(n+1, n+8, 2): #한줄씩 밑으로 건너뜀, 첫칸은 W
#2-1
for j in range(m, m+8, 2): #한칸씩 옆으로 건너뛰며 W인지 확인
if board[i][j]!="W":
count = count + 1
#2-2
for j in range(m+1, m+8, 2): #한칸씩 옆으로 건너뛰며 B인지 확인
if board[i][j]!="B":
count = count + 1
count = min(count, 64-count)
result = min(count, result)
print(result)
'[Python]BaekJoon.AC' 카테고리의 다른 글
[Python]백준 BaekJoon.AC 2751 : 수 정렬하기2(sys, sort()) (0) | 2022.01.13 |
---|---|
[Python]백준 BaekJoon.AC 2609 : 최대공약수와 최소공배수(유클리드 호제법) (0) | 2022.01.12 |
[Python]백준 BaekJoon.AC 1436 : 영화감독 숌(브루트포스, find()) (0) | 2022.01.11 |
[Python]백준 BaekJoon.AC 1181 : 단어 정렬(sort()) (0) | 2022.01.11 |
[Python]백준 BaekJoon.AC 11050 : 이항 계수1(for문) (0) | 2022.01.09 |
[Python]백준 BaekJoon.AC 2869 : 달팽이는 올라가고 싶다(ceil()) (0) | 2022.01.09 |
[Python]백준 BaekJoon.AC 2839 : 설탕 배달(for문, if문, reversed()) (0) | 2022.01.07 |
[Python]백준 BaekJoon.AC 1259 : 팰린드롬수(slice) (0) | 2022.01.06 |