개미의 개열시미 프로그래밍

[알고리즘] 백준1080 행렬 - 파이썬 본문

알고리즘/그리디 & 구현

[알고리즘] 백준1080 행렬 - 파이썬

YunHyeok 2021. 9. 10. 20:21
728x90
반응형

이제 실버 문제 이상만 풀기 도전.. 알고리즘 초보라 뭐가 브론즈 문제인지 실버 문제인지 구분도 못했다..ㅎ

 

https://www.acmicpc.net/problem/1080

 

1080번: 행렬

첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다.

www.acmicpc.net

 

 

[풀이 코드]

from sys import stdin
input = stdin.readline

n, m = map(int, input().split())
cnt = 0
flag = False
a = [list(map(int, input().strip())) for i in range(n)]
b = [list(map(int, input().strip())) for i in range(n)]

def change(i, j):
    for x in range(i, i+3):
        for y in range(j, j+3):
            a[x][y] = 1 - a[x][y]

for i in range(n-2):
    for j in range(m-2):
        if a[i][j] != b[i][j]:
            change(i, j)
            cnt += 1

for i in range(n):
    for j in range(m):
        if a[i][j] != b[i][j]:
            flag = True

if flag:
    print(-1)
else:
    print(cnt)

- 현재 위치한 i, j 에서 옆으로 +3 밑으로 +3을 해야 하기 때문에 a행렬과 b행렬을 비교해서 연산해주는 첫 번째 for문에서 인덱스 에러가 안 나게끔 구간을 잘 설정해야 한다. -2를 한이유!

 

 

728x90
반응형
Comments