반응형
# Problem
0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오. 행렬을 변환하는 연산은 어떤 3*3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 -> 1, 1 -> 0) 입력첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. 출력첫째 줄에 문제의 정답을 출력한다. 만약 A를 B로 바꿀 수 없다면 -1을 출력한다. |
# Solution
n,m = map(int,input().split())
a = [list(map(int,input()))for _ in range(n)]
b = [list(map(int,input()))for _ in range(n)]
def flip(x,y,z):
for i in range(3):
for j in range(3):
z[x+i][y+j]^=1
ans=0
for i in range(n-2):
for j in range(m-2):
if a[i][j] !=b[i][j]:
flip(i,j,a)
ans+=1
print(ans if a==b else -1)
^ (XOR) 연산자
a[x+i][y+j] ^= 1
a[x+i][y+j] 가 0 이면 -> 1
a[x+i][y+j] 가 1 이면 -> 0
반응형
'Algorithm > 백준 알고리즘 풀이' 카테고리의 다른 글
[Baekjoon] 2014. 소수의 곱 ( 탐욕 알고리즘 ) (0) | 2021.05.16 |
---|---|
[Baekjoon] 2437. 저울 ( 탐욕 알고리즘) (0) | 2021.05.16 |
[Baekjoon] 16676. 근우의 다이어리 꾸미기 (0) | 2021.05.15 |
[Baekjoon] 12849. 본대 산책 (DP) (0) | 2021.05.08 |
[Baekjoon] 1915. 가장 큰 정사각형 (DP) (0) | 2021.05.08 |