[백준 1080] 행렬

sohyun_·2022년 9월 8일
0

백준

목록 보기
2/6

행렬
사용언어 : python
Greedy Alogorithm

문제

💻 코드

N,M = map(int,input().split())
list_a=[list(map(int,input().rstrip())) for _ in range(N)] #2차원 배열 선언
list_b=[list(map(int,input().rstrip())) for _ in range(N)] #2차원 배열 선언

def makeit(i,j): #변환해주는 함수 
    for k in range(i,i+3):
        for m in range(j,j+3):
            if list_a[k][m]==0:
               list_a[k][m]=1 
            else :
               list_a[k][m]=0
    return list_a

def checkit():
    if list_a==list_b:
        return True
    return False
n=0
breaker=False
for i in range(N-2):
    for j in range(M-2):
        if list_a[i][j] != list_b[i][j]:
            makeit(i,j)
            n+=1
            if checkit()==True:
                breaker=True
                break
    if breaker==True  :
        break
if checkit()==False:
    n=-1
print(n)

def를 이용해 행렬을 변환해주는 함수 makeit()과 같은지 확인해주는 함수인 checkit() 두 함수를 각각 만들어 코드의 간결성을 도움

어려움을 겪었던 부분

if list_a[i][j] != list_b[i][j]:

초기 알고리즘 설계시 조건문 (둘의 값이 다르다는 것은 변형 해줘야한다는 의미)을 만족할때만 변경해주면 된다는 사실을 깨닫지 못하고 if문 없이 코드를 다짜놓았었다.

profile
web backend developer

0개의 댓글