알고리즘

백준_16967_배열 복원하기

shj718 2022. 2. 21. 12:15

입력으로 주어진 배열에서 겹치는 부분이 어디인지만 파악하면 되는 간단한 문제였다.

겹치는 부분의 값만 arr[i-X][j-Y]를 뺀값으로 바꿔 준 후, 원래 배열 크기만큼 출력하면 된다.

https://www.acmicpc.net/problem/16967

 

16967번: 배열 복원하기

크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐

www.acmicpc.net

#include<iostream>
using namespace std;

int H, W, X, Y, arr[600][600], A[300][300];

void solve() {
	for (int i = X; i < H; i++) {
		for (int j = Y; j < W; j++) {
			arr[i][j] = arr[i][j] - arr[i - X][j - Y];
		}
	}
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			A[i][j] = arr[i][j];
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> H >> W >> X >> Y;
	for (int i = 0; i < H + X; i++) {
		for (int j = 0; j < W + Y; j++) {
			cin >> arr[i][j];
		}
	}
	solve();
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			cout << A[i][j] << ' ';
		}
		cout << '\n';
	}
	return 0;
}