Skip to content

Commit 817debd

Browse files
committed
[20250925] BOJ / G5 / 헹상 팀시 / 김민진
1 parent 1d2fba7 commit 817debd

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
```java
2+
import java.io.*;
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.StringTokenizer;
6+
7+
public class BJ_5549_행성_탐사 {
8+
9+
private static final Map<Character, Integer> MAP = new HashMap<>();
10+
11+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
13+
private static final StringBuilder sb = new StringBuilder();
14+
private static StringTokenizer st;
15+
private static int M, N, K;
16+
private static int[][][] dp;
17+
18+
// Java 8
19+
static {
20+
MAP.put('J', 0);
21+
MAP.put('O', 1);
22+
MAP.put('I', 2);
23+
}
24+
25+
public static void main(String[] args) throws IOException {
26+
init();
27+
sol();
28+
}
29+
30+
private static void init() throws IOException {
31+
st = new StringTokenizer(br.readLine());
32+
M = Integer.parseInt(st.nextToken());
33+
N = Integer.parseInt(st.nextToken());
34+
K = Integer.parseInt(br.readLine());
35+
36+
dp = new int[M + 1][N + 1][3]; // J, O, I일때 누적합
37+
38+
for (int i = 1; i <= M; i++) {
39+
String s = br.readLine();
40+
for (int j = 1; j <= N; j++) {
41+
char c = s.charAt(j - 1);
42+
43+
// prefix
44+
dp[i][j][0] = dp[i - 1][j][0] + dp[i][j - 1][0] - dp[i - 1][j - 1][0];
45+
dp[i][j][1] = dp[i - 1][j][1] + dp[i][j - 1][1] - dp[i - 1][j - 1][1];
46+
dp[i][j][2] = dp[i - 1][j][2] + dp[i][j - 1][2] - dp[i - 1][j - 1][2];
47+
48+
dp[i][j][MAP.get(c)]++;
49+
}
50+
}
51+
}
52+
53+
private static void sol() throws IOException {
54+
while (K-- > 0) {
55+
st = new StringTokenizer(br.readLine());
56+
57+
int x1 = Integer.parseInt(st.nextToken());
58+
int y1 = Integer.parseInt(st.nextToken());
59+
int x2 = Integer.parseInt(st.nextToken());
60+
int y2 = Integer.parseInt(st.nextToken());
61+
62+
for (int i = 0; i < 3; i++) {
63+
sb.append(dp[x2][y2][i] - dp[x1 - 1][y2][i] - dp[x2][y1 - 1][i] + dp[x1 - 1][y1 - 1][i]).append(" ");
64+
}
65+
sb.append("\n");
66+
}
67+
bw.write(sb.toString());
68+
bw.flush();
69+
bw.close();
70+
br.close();
71+
}
72+
73+
}
74+
```

0 commit comments

Comments
 (0)