[백준] 1080번 행렬 - 파이썬/그리디

JinUk Lee·2023년 1월 10일
0

백준 알고리즘

목록 보기
14/78

https://www.acmicpc.net/problem/1080



N,M = map(int,input().split())

A=[]
B=[]

for i in range(N):
    a = list(map(int,input()))
    A.append(a)

for i in range(N):
    b = list(map(int,input()))
    B.append(b)


cnt=0


if N>=3 and N>=3:

    for i in range(N-2):
        for j in range(M-2):
            if A[i][j]!=B[i][j]:
                A[i][j] = 1 - A[i][j]
                A[i+1][j] = 1 - A[i+1][j]
                A[i+2][j] = 1 - A[i+2][j]
                A[i][j+1] = 1 - A[i][j+1]
                A[i][j+2] = 1 - A[i][j+2]
                A[i+1][j+1] = 1 - A[i+1][j+1]
                A[i+1][j+2] = 1 - A[i+1][j+2]
                A[i+2][j+1] = 1 - A[i+2][j+1]
                A[i+2][j+2] = 1 - A[i+2][j+2]

                cnt+=1


if A==B:
    print(cnt)
else:
    print(-1)

위 그림처럼 3X3행렬의 가장 왼쪽 위 숫자만 비교해주면서 행렬을 변경해준다.

변경이 끝나고 A==B가 같으면 cnt를 출력, 다르면 -1을 출력하고 예외조건으로 N,M이 3 미만일때도 생각해준다.

profile
개발자 지망생

0개의 댓글