1080 : 행렬

서희찬·2022년 1월 13일
0

백준

목록 보기
91/105

문제

코드

cnt=0
n,m = map(int,input().split())
matrixA = [list(map(int,list(input()))) for _ in range(n)]
matrixB = [list(map(int,list(input()))) for _ in range(n)]

def change(x,y):
    for i in range(x,x+3):
        for j in range(y,y+3):
            matrixA[i][j]=1-matrixA[i][j] #1->0 0->1 skill 

def check():
    for i in range(n):
        for j in range(m):
            if matrixA[i][j]!=matrixB[i][j]:
                return False 
    return True 

for i in range(n-2):
    for j in range(m-2):
        if matrixA[i][j] != matrixB[i][j]:
            change(i,j)
            cnt+=1 
if check():
    print(cnt)
else:
    print(-1)

해설

matrixA = [list(map(int,list(input()))) for _ in range(n)]

행렬 입력받을때 이런 방식으로 한줄로 입력이 가능하다..

change

def change(x,y):
    for i in range(x,x+3):
        for j in range(y,y+3):
            matrixA[i][j]=1-matrixA[i][j] #1->0 0->1 skill 

매트릭스를 뒤집는데 1- 이런식으로 접근해서 1->0 0->1로 변경이 가능하다 유용한 스킬인거같다.

check

def check():
    for i in range(n):
        for j in range(m):
            if matrixA[i][j]!=matrixB[i][j]:
                return False 
    return True 

그냥 체크하는 함수..

결론은, 두 행렬을 비교하고 만약 같지 않다면 change함수를 돌리면서 계속해서 변경해나가는건데 순서대로 포문을 돌면서 실행하는 방식이여서 최적의해를 구하는 그리디알고리즘인것같다..

그리디 넘나리 어렵다리,,,

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글