Skip to content

Commit bbc8184

Browse files
authored
Merge pull request #1936 from AlgorithmWithGod/JHLEE325
[20260215] BOJ / G3 / 나무 재테크 / 이준희
2 parents ae1a5c3 + 5b73c0a commit bbc8184

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
class Tree implements Comparable<Tree> {
6+
int r, c, age;
7+
8+
public Tree(int r, int c, int age) {
9+
this.r = r;
10+
this.c = c;
11+
this.age = age;
12+
}
13+
14+
@Override
15+
public int compareTo(Tree o) {
16+
return this.age - o.age;
17+
}
18+
}
19+
20+
public class Main {
21+
22+
static int N, M, K;
23+
static int[][] map, A;
24+
static Deque<Tree> trees = new ArrayDeque<>();
25+
static int[] dr = {-1, -1, -1, 0, 0, 1, 1, 1};
26+
static int[] dc = {-1, 0, 1, -1, 1, -1, 0, 1};
27+
28+
public static void main(String[] args) throws IOException {
29+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
30+
StringTokenizer st = new StringTokenizer(br.readLine());
31+
32+
N = Integer.parseInt(st.nextToken());
33+
M = Integer.parseInt(st.nextToken());
34+
K = Integer.parseInt(st.nextToken());
35+
36+
map = new int[N + 1][N + 1];
37+
A = new int[N + 1][N + 1];
38+
39+
for (int i = 1; i <= N; i++) {
40+
st = new StringTokenizer(br.readLine());
41+
for (int j = 1; j <= N; j++) {
42+
A[i][j] = Integer.parseInt(st.nextToken());
43+
map[i][j] = 5;
44+
}
45+
}
46+
47+
List<Tree> initialTrees = new ArrayList<>();
48+
for (int i = 0; i < M; i++) {
49+
st = new StringTokenizer(br.readLine());
50+
int r = Integer.parseInt(st.nextToken());
51+
int c = Integer.parseInt(st.nextToken());
52+
int age = Integer.parseInt(st.nextToken());
53+
initialTrees.add(new Tree(r, c, age));
54+
}
55+
Collections.sort(initialTrees);
56+
for (Tree t : initialTrees) trees.add(t);
57+
58+
for (int k = 0; k < K; k++) {
59+
solve();
60+
}
61+
62+
System.out.println(trees.size());
63+
}
64+
65+
static void solve() {
66+
Deque<Tree> aliveTrees = new ArrayDeque<>();
67+
List<Tree> deadTrees = new ArrayList<>();
68+
69+
while (!trees.isEmpty()) {
70+
Tree t = trees.pollFirst();
71+
if (map[t.r][t.c] >= t.age) {
72+
map[t.r][t.c] -= t.age;
73+
t.age++;
74+
aliveTrees.addLast(t);
75+
} else {
76+
deadTrees.add(t);
77+
}
78+
}
79+
80+
for (Tree t : deadTrees) {
81+
map[t.r][t.c] += t.age / 2;
82+
}
83+
84+
Deque<Tree> nextYearTrees = new ArrayDeque<>();
85+
for (Tree t : aliveTrees) {
86+
if (t.age % 5 == 0) {
87+
for (int i = 0; i < 8; i++) {
88+
int nr = t.r + dr[i];
89+
int nc = t.c + dc[i];
90+
if (nr >= 1 && nr <= N && nc >= 1 && nc <= N) {
91+
nextYearTrees.addFirst(new Tree(nr, nc, 1));
92+
}
93+
}
94+
}
95+
}
96+
97+
for (Tree t : aliveTrees) {
98+
nextYearTrees.addLast(t);
99+
}
100+
trees = nextYearTrees;
101+
102+
for (int i = 1; i <= N; i++) {
103+
for (int j = 1; j <= N; j++) {
104+
map[i][j] += A[i][j];
105+
}
106+
}
107+
}
108+
}
109+
```

0 commit comments

Comments
 (0)