[백준/Python] 1080_행렬
2021. 7. 3. 15:21ㆍ백준 알고리즘
문제
https://www.acmicpc.net/problem/1080
코드
import sys
def convert_matrix(r, c, matrix):
for i in range(r, r + 3):
for j in range(c, c + 3):
matrix[i][j] = 1 - matrix[i][j]
n, m = map(int, sys.stdin.readline().rstrip().split())
standard_matrix = [] # 기준 행렬
change_matrix = [] # 수정할 행렬
for _ in range(n):
standard_matrix.append(list(map(int, list(sys.stdin.readline().rstrip()))))
for _ in range(n):
change_matrix.append(list(map(int, list(sys.stdin.readline().rstrip()))))
convert_cnt = 0 # 뒤집는 횟수
for i in range(n - 2):
for j in range(m - 2):
if standard_matrix[i][j] != change_matrix[i][j]:
convert_matrix(i, j, change_matrix)
convert_cnt += 1
for i in range(n):
for j in range(m):
if standard_matrix[i][j] != change_matrix[i][j]:
print(-1)
exit(0)
print(convert_cnt)
풀이
기준 행렬과 수정할 행렬을 각각 standard_matrix, change_matrix 2차원 배열에 저장합니다.
3*3 부분 행렬의 맨 왼쪽 위의 row, column값을 입력받아서 해당 부분 행렬을 뒤집는 함수 convert_matrix를 선언합니다.
행렬의 (0,0)지점부터 (n-2, m-2)지점까지 순회하면서 change_matrix의 값과 standard_matrix의 값이 다를 때 부분 행렬을 뒤집습니다.
뒤집을 때마다 convert_cnt에 1을 더합니다.
반복문이 모두 종료되면 두 행렬을 비교하여 일치하면 convert_cnt를 출력하고, 하나라도 다른게 존재하면 -1을 출력합니다.
'백준 알고리즘' 카테고리의 다른 글
[백준/Python] 11048_이동하기 (0) | 2021.07.05 |
---|---|
[백준/Python] 2294_동전2 (0) | 2021.07.03 |
[백준/Python] 1325_효율적인 해킹 (0) | 2021.07.02 |
[백준/Python] 18870_ 좌표 압축 (0) | 2021.07.02 |
[백준/Python] 9020_골드바흐의 추측 (0) | 2021.07.01 |