[백준] 16967. 배열 복원하기
문제 링크
풀이 과정
배열 B를 입력받고, 문제의 규칙에 따라 배열 A를 찾아내는 구현 문제입니다.
위 예제에서, 빨간색 사각형 내 요소들 중 파란색 사각형에 포함되지 않는 부분은 배열 A의 원본 값이 됩니다. 다시 말해, A[0][0], A[0][1], A[0][2], A[1][0], A[2][0]은 덧셈이 발생하지 않은 순수 배열 A의 요소로 저장할 수 있습니다.
하지만, 빨간색 사각형 내 요소들 중 파란색 사각형과 겹치는 부분은 옮기기 전 배열 A의 위치에 해당하는 값과의 덧셈이 발생한 것입니다. 즉 A[1][1], A[1][2], A[2][1], A[2][2]의 값을 구하기 위해선 뺄셈을 해줘야 합니다. 예를 들어, B[1][1]의 값 6은 문제 규칙에 따라 A[1-1][1-1]에 A[1][1]을 더한 값이 됩니다. 즉, A[1][1]은 B[1][1]-A[0][0]으로 구할 수 있습니다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int W = sc.nextInt();
int X = sc.nextInt();
int Y = sc.nextInt();
int[][] B = new int[H + X][W + Y];
int[][] A = new int[H][W];
for (int i = 0; i < B.length; i++) {
for (int j = 0; j < B[i].length; j++) {
B[i][j] = sc.nextInt();
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (i - X >= 0 && j - Y >= 0) {
A[i][j] = B[i][j] - A[i - X][j - Y];
} else {
A[i][j] = B[i][j];
}
}
}
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
System.out.print(A[i][j] + " ");
}
System.out.println();
}
}
}
댓글남기기