1080. 행렬

멍진이·2021년 6월 15일
0

백준 문제풀기

목록 보기
10/36

문제 링크

1080. 행렬

문제 코드

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

num_list = list(map(int,input().split()))

row = num_list[0]
col = num_list[1]

matrix1 = [[0 for i in range(col)] for j in range(row)]
matrix2 = [[0 for i in range(col)] for j in range(row)]

for i in range(row):
    num_list = input()
    for j in range(col):
        matrix1[i][j] = int(num_list[j])

for i in range(row):
    num_list = input()
    for j in range(col):
        matrix2[i][j] = int(num_list[j])

change_count = 0

for i in range(row-2):
    for j in range(col-2):
        if matrix1[i][j] != matrix2[i][j]:
            change_count+=1
            change_matrix(i,j)

if matrix1 == matrix2:
    print(change_count)
else:
    print(-1)

문제 풀이

  • 처음에는 matrix1 [i:i+3] != matrix2[i:i+3] 이 다를 경우 바꿔주도록 했다.
    000111 000000
    000111 000000
    000111 000000
    두개의 매트릭스 결과값은 1이어야 하나 이상하게 바꿔주는 것을 확인
  • 두번째는 각각의 3*3 부분 행렬중 가장 많이 다른 부분부터 바꿔주도록 설계했으나 틀렸다고 함
  • 맨 앞의 셀부터 비교하면서 달라질때마다 부분 행렬을 바꾸도록 하면, 그 앞의 셀은 영향을 끼치지 않는다는 것을 확인
  • 0부터 row-2, col-2 까지의 모든 셀을 확인하면서 다를때마다 count를 증가시키도록 함
  • 최종적으로 두개의 행렬이 같으면 카운트 출력
  • 다르면 불가능한것이므로 -1 출력
profile
개발하는 멍멍이

0개의 댓글