1. ๋ฌธ์ ์ค๋ช
์๋ ๋ฐฐ์ด A๋ฅผ ์์ง์ผ๋ก X, ์ํ์ผ๋ก Y๋งํผ ์ด๋์ํจ ๋ค์ ์๋ ๋ฐฐ์ด A์ ๊ฒน์ณ์ ์๋ก์ด ๋ฐฐ์ดB๋ฅผ ๋ง๋ ๋ค. ๋ง๋๋ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ฒน์น๋ ๋ถ๋ถ์ ๊ฒน์น๋ ๊ฐ์ ํฉ์ด๋ค.
- ์ ๊ฒน์น๋ ๋ถ๋ถ์ ์๋ ๊ฐ ๊ทธ๋๋ก ์ด๋ค.
- ์๋ ์กด์ฌํ์ง ์์๋ ์๋ก์ด ํ์ผ์ ๊ฐ์ผ 0์ด๋ค.
๊ฒน์ณ์ง ๋ฐฐ์ด B๊ฐ ์ฃผ์ด์ง ๋, ์๋ ๋ฐฐ์ด A์ ๊ฐ์ ๊ตฌํด๋ผ.
2. ํธ๋ ๋ฐฉ๋ฒ
์๋ก์ด ๋ฐฐ์ด A๋ฅผ B๋ฅผ ํตํด์ ๊ตฌํ ๋, ๊ฒน์น์ง ์๋ ๋ถ๋ถ์ B๊ฐ ๊ทธ๋๋ก ๋ฃ๋๋ค. ๊ทธ๊ฒ ์๋ A ๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฒน์น๋ ๋ถ๋ถ์ B[i][j]๋ผ๊ณ ํ ๋, A[i][j] = B[i][j] - A[i-X][j-Y] ์ด๋ค. ์ฌ๊ธฐ์ ๋ง๋๋ ์ค์ธ A ๋ฐฐ์ด์ ๋นผ์ฃผ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. - A[i-X][j-Y]์ ์๋ฏธ๋ B์ ํฉํด์ง ๊ฐ์์ ์๋ฆฌ ์ด๋์ ํตํด ๋ํด์ง ๊ฐ์ ๋นผ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ๊ทผ๋ฐ B[i][j] - B[i-X][j-Y]๋ฅผ ํ๋ฉด, B[i-X][j-Y]๋ ์ด๋ฏธ ๋ ๊ฐ์ ์๊ฐ ํฉํด์ง ๊ฐ์ด๋ฏ๋ก ์ ํํ ๋ต์ ๊ตฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ฉด์ ์ด๋ค ๊ฒฝ์ฐ๋ผ๋ A[1][1]์ B[1][1]์ด๋ค. (์กฐ๊ฑด์์ X,Y๋ ํญ์ 1๋ณด๋ค ํฌ๋ค.) ๋ฐ๋ผ์ [1][1]๋ถํฐ Stack up ํด ๋๊ฐ๋ฉด A๋ ๋ฌด์กฐ๊ฑด ์๋์ ์์ํ ๊ฐ์ด ๋ด๊ธด๋ค. ๋ฐ๋ผ์ A๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ ํํ ๋ต์ ๋์ถํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.util.*;
import java.io.*;
public class Main{
static int H, W, X, Y;
static int [][] arrA;
static int [][] arrB;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
X = Integer.parseInt(st.nextToken());
Y = Integer.parseInt(st.nextToken());
arrA = new int[H][W];
arrB = new int[H+X][W+Y];
for (int i = 0; i < H+X; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < W+Y; j++) {
arrB[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if(i < X || j < Y){
arrA[i][j] = arrB[i][j];
}
else{
arrA[i][j] = arrB[i][j] - arrA[i-X][j-Y];
}
}
}
for (int[] temp :
arrA) {
for (int temp2 :
temp) {
System.out.print(temp2 + " ");
}
System.out.println();
}
}
}