YataNox
[Java] 16967 배열 복원하기 본문
문제
문제
크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때,
크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸,
오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.
즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.
(i, j)가 두 배열 모두에 포함되지 않으면, Bi,j = 0이다.
(i, j)가 두 배열 모두에 포함되면, Bi,j = Ai,j + Ai-X,j-Y이다.
(i, j)가 두 배열 중 하나에 포함되면, Bi,j = Ai,j 또는 Ai-X,j-Y이다.
배열 B와 정수 X, Y가 주어졌을 때, 배열 A를 구해보자.
입력
첫째 줄에 네 정수 H, W, X, Y가 주어진다. 둘째 줄부터 H + X개의 줄에 배열 B의 원소가 주어진다.
항상 배열 A가 존재하는 경우만 입력으로 주어진다.
출력
총 H개의 줄에 배열 A의 원소를 출력한다.
문제 풀이
자바 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class N16967 {
private static int h,w,x,y;
private static int[][] arrB;
private static int[][] arrA;
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[x + h][y + w];
for(int i = 0; i < x + h; i++){
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < y + w; j++){
arrB[i][j] = Integer.parseInt(st.nextToken());
}
}
//겹치지않는 왼쪽 위 부분
for(int i=0; i<x; i++) {
if (y >= 0) System.arraycopy(arrB[i], 0, arrA[i], 0, y);
}
for(int i=x; i<h; i++) {
if (y >= 0) System.arraycopy(arrB[i], 0, arrA[i], 0, y);
}
//겹치는 부분
for(int i=x; i<h; i++) {
for(int j=y; j<w; j++) {
arrA[i][j] = arrB[i][j] - arrA[i-x][j-y];
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
// A, B 배열 모두에 포함되는 경우
if (i >= x && j >= y) {
arrA[i][j] = arrB[i][j] - arrA[i - x][j - y];
}
else { // 둘 다 포함되지 않거나, 배열 중 하나에 포함되는 경우
arrA[i][j] = arrB[i][j];
}
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
System.out.print(arrA[i][j] + " ");
}
System.out.println();
}
}
}
'코딩 테스트 > BAEKJOON' 카테고리의 다른 글
[Java] 2290 LCD Test (0) | 2024.05.09 |
---|---|
[Java] 16931 겉넓이 구하기 (0) | 2024.05.08 |
[Java] 16920 확장게임 (0) | 2024.05.02 |
[Java] 12851 숨바꼭질 2 (0) | 2024.04.30 |
[Java] 14940 쉬운 최단거리 (0) | 2024.04.30 |