문제 링크
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 출력