본문 바로가기
백준알고리즘/그리디 알고리즘

(Python/🥈1)백준리즘알고리즘 1080번: 행렬

by windy7271 2024. 6. 15.
728x90
반응형

 

문제 바로가기 

 

행렬

문제:

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

sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')

n, m = map(int, sys.stdin.readline().rstrip().split(" "))

initial_value = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(n)]
target_value = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(n)]

count = 0


def change_value(x, y):
    for i in range(x, x + 3):
        for j in range(y, y + 3):
            initial_value[i][j] = 1 - initial_value[i][j]


for x in range(n - 2):
    for y in range(m - 2):
        if initial_value[x][y] != target_value[x][y]:
            change_value(x, y)
            count += 1
if initial_value == target_value :
    print(count)
else:
    print(-1)

 

맨 왼쪽  위부터 체크해서 바꿔주면된다

 

맨 왼쪽 위는 한 번 바꾸면 더이상 바꿀 수 없기때문에 그렇게 해줬다.

반응형

댓글