[백준] C++ 16967번. 배열 복원하기 실버3 - 구현

swb·2022년 11월 18일
0

백준

목록 보기
12/18

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

접근 방법

  1. B배열에서 A배열만큼의 크기만 생각하면 된다.
    3x3인 A배열에서 아래로 2, 오른쪽으로 1만큼 늘어나 5x4인 B배열이 됐을 때

다음과 같이 원래 A크기만 고려하면 된다.

  1. 규칙을 찾아보자.
    [2][1]부분은 기존 [2][1]에서 [0][0]을 더한 값이 나온다. [2][2][2][2]에서 [0][1]을 더한 값이 나온다. 우리는 [2][1][2][2]만 바꿔주면 된다.
    행은 X부터 H까지, 열은 Y부터 W까지 반복해서 [2][1]에서 [0][0]을 빼는 이러한 과정을 거치면 된다.

풀이

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstdio>
using namespace std;

int H, W, X, Y;
int B[601][601];

void input_B() {
	for (int i = 0; i < H + X; i++) {
		for (int j = 0; j < W + Y; j++) {
			cin >> B[i][j];
		}
	}
}

void recover_A() {
	for (int i = X; i < H; i++) {
		for (int j = Y; j < W; j++) {
			B[i][j] -= B[i - X][j - Y];
		}
	}
}

void print_A() {
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			cout << B[i][j] << " ";
		}
		cout << "\n";
	}
}

int main() {
	cin >> H >> W >> X >> Y; // 행, 열, 아래 움직임, 오른쪽 움직임

	input_B(); // B배열을 입력받고
	recover_A(); // A배열을 복원하고
	print_A(); // A배열 출력

	return 0;
}
profile
개발 시작

0개의 댓글