Hanbit the Developer
[Python] 백준 1080번: 행렬 본문
https://www.acmicpc.net/problem/1080
import sys
input = sys.stdin.readline
def convertMatrix(x, y):
if not (0 <= x <= N-3 and 0 <= y <= M-3):
return -1
global matrixA
for i in range(3):
for j in range(3):
matrixA[x+i][y+j] = not matrixA[x+i][y+j]
return 0
def isDone():
for i in range(N):
for j in range(M):
if matrixA[i][j] == True:
return -1
return 0
def printMatrix():
for i in range(N):
print(matrixA[i])
N, M = map(int, input().split())
matrixA = []
for _ in range(N):
curList = []
curLine = input().rstrip()
for c in curLine:
curList.append(int(c))
matrixA.append(curList)
for i in range(N):
curList = []
curLine = input().rstrip()
for j in range(M):
if int(curLine[j]) == matrixA[i][j]:
matrixA[i][j] = False
else:
matrixA[i][j] = True
conversionCount = 0
for i in range(N-2):
for j in range(M-2):
if matrixA[i][j] == True:
if convertMatrix(i, j) == 0:
conversionCount += 1
if isDone() == 0:
print(conversionCount)
else:
print(-1)
우선 matrixA가, 서로 다른 값을 갖고 있는지를 True/False로서 저장하도록 코드를 짜준다.
이후에는 (0, 0) ~ (N-3, M-3)까지 for문을 돌아주면서, 만약 해당 인덱스가 True(해당 위치에서의 값이 서로 다르다는 의미)이면 convertMatrix() 연산을 수행해준다.
이 심플한 과정을 마치고 난 후에, isDone()을 통해 A에서 B로 바꿀 수 있는지를 확인하고 이에 따라 결과를 출력해준다.
'Algorithm > 백준' 카테고리의 다른 글
[Python] 백준 2812번: 크게 만들기 (0) | 2021.05.26 |
---|---|
[Python] 백준 12970번: AB (0) | 2021.05.25 |
[Python] 백준 2138번: 전구와 스위치 (0) | 2021.05.24 |
[Python] 백준 2580번: 스도쿠 (0) | 2021.05.21 |
[Python] 백준 1005번: ACM Craft (0) | 2021.05.20 |