문제 출처: https://www.acmicpc.net/problem/16967
문제
크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.
즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
int H = Integer.parseInt(tokenizer.nextToken()); // 행
int W = Integer.parseInt(tokenizer.nextToken()); // 열
int X = Integer.parseInt(tokenizer.nextToken()); // 행 이동
int Y = Integer.parseInt(tokenizer.nextToken()); // 열 이동
int[][] temp = new int[H + X][W + Y]; // 타겟 배열
for (int i = 0; i < H + X; i++) { // 배열 초기화
tokenizer = new StringTokenizer(reader.readLine());
for (int j = 0; j < W + Y; j++) {
temp[i][j] = Integer.parseInt(tokenizer.nextToken());
}
}
for (int i = X; i < H; i++) {
for (int j = Y; j < W; j++) {
temp[i][j] = temp[i][j] - temp[i - X][j - Y];
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
sb.append(temp[i][j]).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}