반응형
문제: https://www.acmicpc.net/submit/1080
풀이:
왼쪽 맨 위의 좌표를 기준으로 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)
반응형
'Python 코딩테스트' 카테고리의 다른 글
수학: 백준 4375 1 파이썬(python) (0) | 2022.01.13 |
---|---|
수학: 백준 1037 약수 (0) | 2022.01.10 |
BFS(너비 우선 탐색): 백준 1697 숨바꼭질 (0) | 2021.10.06 |
DFS(깊이 우선 탐색): 백준 13023 파이썬 (0) | 2021.10.05 |
DP(다이나믹 프로그래밍): 백준 1912 파이썬 연속합 (0) | 2021.09.30 |