1018号:碁盤を塗り直す[python]


これは白準アルゴリズムの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とし,2つの比較板を形成した.
    両比較板において、88の大きさ単位で、全ての場合の最大値を求める.
    例えば、1010ボード
    WBWBWBWBWB
    BWBWBWBWBW
    WBWBWBWBWB
    BWBBBWBWBW
    WBWBWBWBWB
    BWBWBWBWBW
    WBWBWBWBWB
    BWBWBWBWBW
    WBWBWBWBWB
    BWBWBWBWBW
    入力すると、
    0000000000
    0000000000
    0000000000
    0001000000
    0000000000
    0000000000
    0000000000
    0000000000
    0000000000
    0000000000
    これを、球体で表される枠(チェス盤の大きさ)内の数を加えて設定します.非凸体の部分に移動し、最適フィット値を繰り返し求めて出力します.
    対照軍チェス盤を作らずに比較チェス盤を直接作ると、より効率的になります.
    まず制作の考えで提出しましたが通過しました