반응형
문제
0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오.
행렬을 변환하는 연산은 어떤 3×3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0)
입력
첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다.
출력
첫째 줄에 문제의 정답을 출력한다. 만약 A를 B로 바꿀 수 없다면 -1을 출력한다.
풀이
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
A = [list(map(int, input().rstrip())) for _ in range(n)]
B = [list(map(int, input().rstrip())) for _ in range(n)]
cnt = 0
def change(x, y):
for i in range(x, x+3):
for j in range(y, y+3):
A[i][j] = 1 - A[i][j]
for i in range(n-2):
for k in range(m-2):
if A[i][k] != B[i][k]:
change(i, k)
cnt += 1
for i in range(n):
for k in range(m):
if A[i][k] != B[i][k]:
cnt = -1
break
print(cnt)
반응형
'Develop > 알고리즘' 카테고리의 다른 글
[백준/Python] Silver III #14425 문자열 집합 (0) | 2023.06.01 |
---|---|
[백준/Python] Bronze V #27866 문자와 문자열 (0) | 2023.06.01 |
[백준/Python] Bronze II #2864 5와 6의 차이 (0) | 2023.05.31 |
[백준/Python] Silver III #1213 팰린드롬 만들기 (0) | 2023.05.31 |
[백준/Python] Silver I #11057 오르막 수 (0) | 2023.05.31 |
Comment