Skip to content

Commit bd3d610

Browse files
committed
[Silver III] Title: 배열 복원하기, Time: 292 ms, Memory: 26596 KB -BaekjoonHub
1 parent 9fc79aa commit bd3d610

2 files changed

Lines changed: 48 additions & 31 deletions

File tree

백준/Silver/16967. 배열 복원하기/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 41904 KB, 시간: 384 ms
7+
메모리: 26596 KB, 시간: 292 ms
88

99
### 분류
1010

1111
구현
1212

1313
### 제출 일자
1414

15-
2025년 12월 8일 00:40:38
15+
2026년 3월 7일 18:09:27
1616

1717
### 문제 설명
1818

백준/Silver/16967. 배열 복원하기/배열 복원하기.java

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,58 @@
22
import java.util.*;
33

44
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));
5+
static int h, w, x, y;
6+
static int[][] A, B;
127
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());
8+
preSetting();
9+
findOriginArr();
10+
}
2411

25-
x = i - info[2];
26-
y = j - info[3];
12+
static void findOriginArr(){
13+
int[][] origin = new int[h][w];
2714

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];
15+
for(int i = 0; i < x; i++){
16+
for(int j = 0; j < w; j++){
17+
origin[i][j] = B[i][j];
18+
}
19+
}
20+
for(int i = 0; i < h; i++){
21+
for(int j = 0; j < y; j++){
22+
origin[i][j] = B[i][j];
23+
}
24+
}
25+
for(int i = x; i < h; i++){
26+
for(int j = y; j < w; j++){
27+
origin[i][j] = B[i][j] - origin[i - x][j - y];
28+
}
29+
}
3130

32-
if(j < info[1] - 1) sb.append(arr[i][j]).append(" ");
33-
else sb.append(arr[i][j]);
34-
}
31+
StringBuilder sb = new StringBuilder();
32+
for(int i = 0; i < h; i++){
33+
for(int j = 0; j < w; j++){
34+
sb.append(origin[i][j]).append(" ");
3535
}
36-
if(i < info[0]) sb.append("\n");
36+
sb.append("\n");
3737
}
3838

39-
bw.append(sb);
40-
bw.close();
39+
System.out.println(sb.toString());
40+
}
41+
42+
static void preSetting() throws Exception {
43+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
44+
StringTokenizer st = new StringTokenizer(br.readLine());
45+
46+
h = Integer.parseInt(st.nextToken());
47+
w = Integer.parseInt(st.nextToken());
48+
x = Integer.parseInt(st.nextToken());
49+
y = Integer.parseInt(st.nextToken());
50+
51+
B = new int[h + x][w + y];
52+
for(int i = 0; i < h; i++){
53+
st = new StringTokenizer(br.readLine());
54+
for(int j = 0; j < w; j++){
55+
B[i][j] = Integer.parseInt(st.nextToken());
56+
}
57+
}
4158
}
4259
}

0 commit comments

Comments
 (0)