문제풀이) 백준 - 1080 / 행렬

velg·2021년 5월 15일
0

문제링크

문제 요약

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를 바꿔 사용하여 문제가 있었다.
-> 변수이름을 좀 더 명확하게, 헷갈리지 않게 만들기
profile
초보 개발자

0개의 댓글