같은 배열을 특정 인덱스를 겹치게 하여 새로운 배열을 생성했을 때 겹쳐진 부분의 값을 수정하여 원래의 배열을 찾는 문제이다.
문제에서 가르쳐주는 그대로 구현만 하면 되는 문제!
배열A를 X열, Y행만큼 이동시켰을 때, 배열A의 인덱스[i,j]는 [i+X,j+Y]와 겹쳐진다.
즉, A[i][j] = 겹친배열[i][j] - A[i-X][j-Y]이다
import sys
h, w, x, y = map(int, input().split())
# print(h, w, x, y)
b = [list(map(int, sys.stdin.readline().split())) for _ in range(h+x)]
a = [[0]*w for _ in range(h)]
for i in range(h):
for j in range(w):
a[i][j] = b[i][j]
for i in range(x,h):
for j in range(y,w):
a[i][j] = b[i][j] - a[i-x][j-y]
for i in a:
for j in i:
print(j, end=' ')
print("")
나는 이렇게 2중for문을 두번 사용하여(배열a 초기화, 겹치는 인덱스에 대해 값 변경) 구현했지만, 사실 한번만 사용하여 구현할 수 있다.
import sys
input = sys.stdin.readline
H, W, X, Y = map(int, input().split())
arrs = [list(map(int, input().split())) for _ in range(H + X)]
for x in range(H - X):
for y in range(W - Y):
arrs[x + X][y + Y] -= arrs[x][y]
for i in range(H):
print(*arrs[i][0:W])