1080 행렬

정민용·2023년 4월 19일

백준

목록 보기
134/286

문제

0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오.

행렬을 변환하는 연산은 어떤 3×3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0)

# 1080
import sys
input = lambda : sys.stdin.readline().strip()

n, m = map(int, input().split())

graph_a = [list(input()) for _ in range(n)]
graph_b = [list(input()) for _ in range(n)]

count = 0
    
for i in range(n-2):
    for j in range(m-2):
        if graph_a[i][j] != graph_b[i][j]:
            for y in range(3):
                for x in range(3):
                    ny, nx = i+y, j+x
                    if graph_a[ny][nx] == "0":
                        graph_a[ny][nx] = "1"
                    else:
                        graph_a[ny][nx] = "0"
            count += 1
    
if graph_a == graph_b:
    print(count)
else:
    print("-1")

백준 1080 행렬

0개의 댓글