반응형
https://www.acmicpc.net/problem/1080
1080번: 행렬
첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다.
www.acmicpc.net
💡IDEA
그리디를 사용하는 문제이다.
A행렬의 3×3 부분 행렬을 뒤집어서 B행렬을 만들어야 한다.
뒤집는 과정을 함수로 만들어서 3×3 부분 행렬의 각 값이 1이면 0으로, 0이면 1로 바꾸어 준다.
A행렬과 B행렬의 같은 위치를 비교하여 다른 경우 뒤집는 함수를 실행하고, 횟수를 세어 출력한다. 모든 경우에 뒤집고도 두 행렬이 다른 부분이 있다면 -1을 출력한다.
📌CODE
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
A = [list(map(int, input().rstrip())) for _ in range(N)]
B = [list(map(int, input().rstrip())) for _ in range(N)]
def transfer(r, c):
for i in range(r, r+3):
for j in range(c, c+3):
if A[i][j]:
A[i][j] = 0
else:
A[i][j] = 1
cnt = 0
for r in range(N-2):
for c in range(M-2):
if A[r][c] != B[r][c]:
transfer(r, c)
cnt += 1
for r in range(N):
for c in range(M):
if A[r][c] != B[r][c]:
cnt = -1
print(cnt)
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ][python] 2343. 기타 레슨 (0) | 2022.08.20 |
---|---|
[BOJ][python] 1926. 그림 (0) | 2022.08.20 |
[BOJ][python] 18870. 좌표 압축 (0) | 2022.08.20 |
[BOJ][python] 6603. 로또 (0) | 2022.08.15 |
[BOJ][python] 16234. 인구 이동 (0) | 2022.08.14 |