[백준] 1080번 행렬

거북이·2023년 2월 4일
0

백준[실버1]

목록 보기
26/67
post-thumbnail

💡문제접근

  • 3 × 3 행렬을 함수 reverse를 작성, for문을 이용해 전 범위를 탐색한 다음 일치하지 않으면 1을 0으로, 0을 1로 바꾸는 연산을 수행한 다음 마지막에 함수 check를 작성, 행렬 A와 행렬 B가 일치한다면 필요한 연산의 횟수의 최솟값을 출력하고 일치하지 않다면 0을 출력한다.

💡코드(메모리 : 31256KB, 시간 : 44ms)

import sys
input = sys.stdin.readline

N, M = map(int, input().strip().split())
first_matrix = [list(input()) for _ in range(N)]
second_matrix = [list(input()) for _ in range(N)]

def reverse(x, y):
    for i in range(x, x+3):
        for j in range(y, y+3):
            if first_matrix[i][j] == "0":
                first_matrix[i][j] = "1"
            else:
                first_matrix[i][j] = "0"

def check():
    for i in range(N):
        for j in range(M):
            if first_matrix[i][j] != second_matrix[i][j]:
                return False
    return True

cnt = 0
for i in range(N-2):
    for j in range(M-2):
        if first_matrix[i][j] != second_matrix[i][j]:
            reverse(i, j)
            cnt += 1

if check():
    print(cnt)
else:
    print(-1)

💡소요시간 : 18m

0개의 댓글