[白俊]2018-チェス盤の塗り直し(Python)
1938 ワード
質問する
志敏は自分の住宅で、MN単位の正方形で区切られたM.×Nサイズのボードが見つかりました.一部の正方形は黒に塗り、残りは白に塗ります.志敏はこの板を8切った.×8ヤードのチェス盤を作ります.
チェスの碁盤は白黒の間にあるべきだ.具体的には、各セルは白黒の1つに塗り、共有エッジの2つの長方形は異なる色に塗ります.したがって,この定義によれば,チェス盤が色付く場合は2つしかない.一つは左上の格子が白で、一つは黒です.
スケートボードがチェス盤のように塗る保証がないので、智敏8×8ヤードのチェス盤に切って、正方形をいくつか塗りたいです.もちろん、8 x 8サイズは自由に選べます.プログラムを書いて、志敏が塗り直す正方形の最小個数を求めます.
入力例
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB
に近づく
通常のチェス盤を作るには2つの状況がある.チェス盤の1段目がBであれば、チェス盤の図案は
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB チェス盤の1段目がWであれば、チェス盤の図案は
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW 他の方法が思いつかないので、8 x 8でカットできる場合をすべてテストすることにしました.どちらの場合も2行パターンを4回繰り返す構成単位で比較する.
0.w case="WB"4+"BW"4,b case="BW"4+"WB"4に設定します.
1.入力を8 x 8 2 D配列にスライドします.
2.スライス配列の1、2/3、4/5、6/7、8行を1行に統合し、各症例と比較した.
3.missより少ないページを、b caseおよびw caseよりも現在の最小値と更新する.
に答える
志敏は自分の住宅で、MN単位の正方形で区切られたM.×Nサイズのボードが見つかりました.一部の正方形は黒に塗り、残りは白に塗ります.志敏はこの板を8切った.×8ヤードのチェス盤を作ります.
チェスの碁盤は白黒の間にあるべきだ.具体的には、各セルは白黒の1つに塗り、共有エッジの2つの長方形は異なる色に塗ります.したがって,この定義によれば,チェス盤が色付く場合は2つしかない.一つは左上の格子が白で、一つは黒です.
スケートボードがチェス盤のように塗る保証がないので、智敏8×8ヤードのチェス盤に切って、正方形をいくつか塗りたいです.もちろん、8 x 8サイズは自由に選べます.プログラムを書いて、志敏が塗り直す正方形の最小個数を求めます.
入力例
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB
に近づく
通常のチェス盤を作るには2つの状況がある.
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
0.w case="WB"4+"BW"4,b case="BW"4+"WB"4に設定します.
1.入力を8 x 8 2 D配列にスライドします.
2.スライス配列の1、2/3、4/5、6/7、8行を1行に統合し、各症例と比較した.
3.missより少ないページを、b caseおよびw caseよりも現在の最小値と更新する.
に答える
N,M = map(int, input().split())
board = []
for _ in range(N) :
board.append(input())
w_case = "WB"x4 + "BW"x4
b_case = "BW"x4 + "WB"x4
min = 2174000
cnt_1 = 0
cnt_2 = 0
for r in range(N-7):
for c in range(M-7):
cnt_1 = 0
cnt_2 = 0
sector = ""
for row in board[r:r+8] :
sector += row[c:c+8]
if len(sector) == 16:
for i in range(16) :
if sector[i] != w_case[i]:
cnt_1 += 1
elif sector[i] != b_case[i] :
cnt_2 += 1
sector = ""
if cnt_1 <= cnt_2 and cnt_1 < min :
min = cnt_1
elif cnt_2 < cnt_1 and cnt_2 < min :
min = cnt_2
print(min)
Reference
この問題について([白俊]2018-チェス盤の塗り直し(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@hotty6868/백준1018-체스판-다시-칠하기-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol