문제링크
문제 요약
1. 0과1로 이루어진 행렬 A,B를 일치 시키는 최소 연산횟수를 구하라
2. 3*3 행렬의 모든 원소를 뒤집어 가며 일치 시켜야 한다
3. 일치 시킬수 없을 경우 -1을 출력한다
어떻게 풀어야 할까?
0,0에서 시작해서 각 축의 idx를 1씩 증가시켜 3-idx이 3보다 작을 때 까지 뒤집어 가며 횟수와 일치가능여부를 체크한다.
코드
matrix_a = [list(input()) for _ in range(n)]
matrix_b = [list(input()) for _ in range(n)]
y = 0
result = 0
while n - y > 2:
x = 0
while m - x > 2:
if matrix_a[y][x] != matrix_b[y][x]:
result += 1
for i in range(3):
for j in range(3):
if matrix_a[y+j][x+i] == '1':
matrix_a[y+j][x+i] = '0'
else:
matrix_a[y+j][x+i] = '1'
x += 1
y += 1
if matrix_a == matrix_b: print(result)
else: print(-1)
코드 풀이
line 9. [0][0]에서 [m-x][n-y]까지 입력 받은 matrix_a, matrix_b를 비교하는 반복문
line 14. 비교중 다른 원소가 있다면 3*3 크기의 원소 모두를 변경시키는 중첩 for문
line 23. 연산이 끝난 뒤에도 a,b가 같지 않다면 -1을 출력
피드백
현재의 나 기준, 구현이 복잡해서 오래 걸렸다.
-> 문제를 풀어보며 구현력 기르기
풀이 도중 x와 y를 바꿔 사용하여 문제가 있었다.
-> 변수이름을 좀 더 명확하게, 헷갈리지 않게 만들기