1080: 행렬

ewillwin·2023년 7월 8일
0

Problem Solving (BOJ)

목록 보기
112/230

  • greedy로 풀이
  • 행렬을 변환하는 연산이 3*3 크기의 부분행렬에 있는 모든 원소를 뒤집는 것이므로, 행렬 A를 순회하면서 행렬 B와 부분행렬의 (0, 0)에 있는 원소가 다르다면 toggle함 (toggle시 cnt 1 증가)
  • 순회를 마친 후 A와 B가 다르다면 print(-1)하고 프로세스 종료
import sys

def toggle(x, y):
    for i in range(x, x+3):
        for j in range(y, y+3):
            A[i][j] = 1 - A[i][j]

N, M = map(int, sys.stdin.readline()[:-1].split())
A = []
for n in range(N):
    A.append(list(map(int, list(sys.stdin.readline()[:-1]))))
B = []
for n in range(N):
    B.append(list(map(int, list(sys.stdin.readline()[:-1]))))

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

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

print(cnt)
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글