본문 바로가기

Python 코딩테스트

그리디: 백준 1080 파이썬 행렬

반응형

문제: https://www.acmicpc.net/submit/1080

 

로그인

 

www.acmicpc.net

풀이:

왼쪽 맨 위의 좌표를 기준으로 3x3 크기로  0 -> 1, 1 -> 0 뒤집어주면 된다.

주의할 점은 좌표를 뒤집는 범위를 n-2, m-2 로 제한해야 한다는 것과,

n과 m이 3보다 작을 경우를 고려해주어야 한다는 것이다.

 

for i in range(n-2):
    for j in range(m-2):
        if A[i][j] != B[i][j]:
            reverse(i, j)
            result += 1

	if A == B:
        print(result)
        exit()

다음과 같이 코드를 작성하면 n과 m이 3보다 작을 경우를 고려하지 않고 리스트A와 리스트B가 같은지 

검사하기 때문에 제출할 경우 틀렸다는 대답을 받게된다.

 

정답:

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
A = [list(map(int, list(input().rstrip()))) for _ in range(n)]
B = [list(map(int, list(input().rstrip()))) for _ in range(n)]

result = 0


def reverse(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]:
            reverse(i, j)
            result += 1

if A == B:
    print(result)
else:
    print(-1)

 

반응형