Skip to content

Commit 0c156ed

Browse files
committed
[Silver III] Title: 배열 복원하기, Time: 384 ms, Memory: 41904 KB -BaekjoonHub
1 parent 27ce25a commit 0c156ed

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# [Silver III] 배열 복원하기 - 16967
2+
3+
[문제 링크](https://www.acmicpc.net/problem/16967)
4+
5+
### 성능 요약
6+
7+
메모리: 41904 KB, 시간: 384 ms
8+
9+
### 분류
10+
11+
구현
12+
13+
### 제출 일자
14+
15+
2025년 12월 8일 00:40:38
16+
17+
### 문제 설명
18+
19+
<p>크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.</p>
20+
21+
<p>즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.</p>
22+
23+
<ul>
24+
<li>(i, j)가 두 배열 모두에 포함되지 않으면, B<sub>i,j</sub> = 0이다.</li>
25+
<li>(i, j)가 두 배열 모두에 포함되면, B<sub>i,j</sub> = A<sub>i,j</sub> + A<sub>i-X,j-Y</sub>이다.</li>
26+
<li>(i, j)가 두 배열 중 하나에 포함되면, B<sub>i,j</sub> = A<sub>i,j</sub> 또는 A<sub>i-X,j-Y</sub>이다.</li>
27+
</ul>
28+
29+
<p>배열 B와 정수 X, Y가 주어졌을 때, 배열 A를 구해보자.</p>
30+
31+
### 입력
32+
33+
<p>첫째 줄에 네 정수 H, W, X, Y가 주어진다. 둘째 줄부터 H + X개의 줄에 배열 B의 원소가 주어진다.</p>
34+
35+
<p>항상 배열 A가 존재하는 경우만 입력으로 주어진다.</p>
36+
37+
### 출력
38+
39+
<p>총 H개의 줄에 배열 A의 원소를 출력한다.</p>
40+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
static int[] info;
7+
static int[][] arr, copyArr;
8+
static StringTokenizer st;
9+
static StringBuilder sb = new StringBuilder();
10+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
12+
public static void main(String[] args) throws Exception {
13+
st = new StringTokenizer(br.readLine());
14+
15+
info = new int[4];
16+
for (int i = 0; i < 4; i++) info[i] = Integer.parseInt(st.nextToken());
17+
arr = new int[info[0]][info[1]];
18+
copyArr = new int[info[0] + info[2]][info[1] + info[3]];
19+
int x, y;
20+
for (int i = 0; i < info[0] + info[2]; i++) {
21+
st = new StringTokenizer(br.readLine());
22+
for (int j = 0; j < info[1] + info[3]; j++) {
23+
copyArr[i][j] = Integer.parseInt(st.nextToken());
24+
25+
x = i - info[2];
26+
y = j - info[3];
27+
28+
if (i < info[0] && j < info[1]) {
29+
if (0 <= x && x < info[0] && 0 <= y && y < info[1]) arr[i][j] = copyArr[i][j] - arr[x][y];
30+
else arr[i][j] = copyArr[i][j];
31+
32+
if(j < info[1] - 1) sb.append(arr[i][j]).append(" ");
33+
else sb.append(arr[i][j]);
34+
}
35+
}
36+
if(i < info[0]) sb.append("\n");
37+
}
38+
39+
bw.append(sb);
40+
bw.close();
41+
}
42+
}

0 commit comments

Comments
 (0)