1018번: 체스판 다시 칠하기 [Python]
2811 단어 1018체스판 다시 칠하기python1018
백준 알고리즘의 11050문제이다.
- 일단 되게는 하자
# 입력
y, x = map(int, input().split(" "))
board = []
for i in range(y):
board.append(input())
# 대조군 생성
contrast_W = []
contrast_B = []
for i in range(y):
tmpstring = ""
for j in range(x):
if i % 2 == 1:
if j % 2 == 1: # 홀수
tmpstring += "W"
if j % 2 == 0: # 짝수
tmpstring += "B"
else:
if j % 2 == 1: # 홀수
tmpstring += "B"
if j % 2 == 0: # 짝수
tmpstring += "W"
contrast_W.append(tmpstring)
for i in range(y):
tmpstring = ""
for j in range(x):
if i % 2 == 1:
if j % 2 == 1: # 홀수
tmpstring += "B"
if j % 2 == 0: # 짝수
tmpstring += "W"
else:
if j % 2 == 1: # 홀수
tmpstring += "W"
if j % 2 == 0: # 짝수
tmpstring += "B"
contrast_B.append(tmpstring)
# 입력된 체스판과 대조군과 비교하여 비교체스판 생성
compare_W = []
compare_B = []
for i in range(y):
tmplist = []
for j in range(x):
if board[i][j] == contrast_W[i][j]:
tmplist.append(0)
else:
tmplist.append(1)
compare_W.append(tmplist)
for i in range(y):
tmplist = []
for j in range(x):
if board[i][j] == contrast_B[i][j]:
tmplist.append(0)
else:
tmplist.append(1)
compare_B.append(tmplist)
# 최솟값구하기
result = 65
for i in range(x - 7):
for j in range(y - 7):
tmpresult = 0
for k in range(8):
tmpresult += sum(compare_W[j + k][i:i + 8])
if result > tmpresult:
result = tmpresult
for i in range(x - 7):
for j in range(y - 7):
tmpresult = 0
for k in range(8):
tmpresult += sum(compare_B[j + k][i:i + 8])
if result > tmpresult:
result = tmpresult
print(result)
입력 값을 받는다.
입력된 크기에 해당하는 체스판 2개를 만든다.
입력된 보드와 체스판을 비교하여, 일치하는 부위는 0, 일치하지 않는 부위는 1으로 두 개의 비교판을 만든다.
두 비교판에서 88의 크기를 단위로 모든 경우의 수에서의 최솟값을 구한다.
예를들어, 1010보드
WBWBWBWBWB
BWBWBWBWBW
WBWBWBWBWB
BWBBBWBWBW
WBWBWBWBWB
BWBWBWBWBW
WBWBWBWBWB
BWBWBWBWBW
WBWBWBWBWB
BWBWBWBWBW
가 입력되면,
0000000000
0000000000
0000000000
0001000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
로 만든 다음, 볼드체로 표시한 틀(체스판 크기) 안의 수를 합한다. 이를 이를 볼드체가 아닌 부분으로 옮겨가며 반복하여 합의 최솟값을 구하여 출력한다.
대조군 체스판을 굳이 만들지 않고 바로 비교 체스판을 생성하면 더 효율적일 것 같다.
일단 되게는 만들자는 생각으로 제출했는데, 통과했다.
Author And Source
이 문제에 관하여(1018번: 체스판 다시 칠하기 [Python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongkan9/1018번-체스판-다시-칠하기-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)