행렬 [백준 1080] (파이썬)

오준혁·2023년 6월 21일
0

알고리즘

목록 보기
9/29

문제


행렬 [백준 1080]
https://www.acmicpc.net/problem/1080

풀이


다소 복잡하게 생각하다가 많이 돌아갔는데, 그저 칸들을 다 돌아보면서 값이 다른 칸이 있으면 3 * 3 을 뒤집어주고 모든 칸들을 다 조사했을 때 똑같지 않다면 -1 제출한다.

코드


n, m = map(int, input().split())
array1 = [[int(i) for i in input()] for _ in range(n)]
array2 = [[int(i) for i in input()] for _ in range(n)]
board = [[0] * m for _ in range(n)]

def flip(x, y):	#뒤집기
    for i in range(x, x + 3):
        for j in range(y, y + 3):
            board[i][j] = (board[i][j] + 1) % 2
            
for i in range(n):
    for j in range(m):
        board[i][j] = (array1[i][j] + array2[i][j]) % 2
        # 행렬 합치기
count = 0

for i in range(n):
    for j in range(m):
        if board[i][j] == 1 and i <= n - 3 and j <= m - 3:
            flip(i, j)
            count += 1

for i in range(n):
    for j in range(m):
        if board[i][j] != 0:
            count = -1
            
print(count)

0개의 댓글