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)
맨 왼쪽 위부터 체크해서 바꿔주면된다
맨 왼쪽 위는 한 번 바꾸면 더이상 바꿀 수 없기때문에 그렇게 해줬다.
반응형
댓글