Skip to content

Commit c145245

Browse files
committed
Merge branch 'week13'
2 parents 9850c8d + b85b131 commit c145245

File tree

4 files changed

+158
-0
lines changed

4 files changed

+158
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
StringTokenizer st = new StringTokenizer(br.readLine());
9+
int N = Integer.parseInt(st.nextToken());
10+
int K = Integer.parseInt(st.nextToken());
11+
// d[i][무게] = i번째 보급품에서의 최대 가치
12+
int[][] d = new int[N+1][K+1];
13+
int[] w = new int[N+1];
14+
int[] v = new int[N+1];
15+
for(int i=1; i<=N; i++) {
16+
st = new StringTokenizer(br.readLine());
17+
// 무게
18+
w[i] = Integer.parseInt(st.nextToken());
19+
// 가치
20+
v[i] = Integer.parseInt(st.nextToken());
21+
}
22+
for(int i=1; i<=N; i++) {
23+
for(int j=1; j<=K; j++) {
24+
if(j-w[i] >= 0) {
25+
d[i][j] = Math.max(d[i-1][j], d[i-1][j-w[i]] + v[i]);
26+
}else {
27+
d[i][j] = d[i-1][j];
28+
}
29+
}
30+
}
31+
System.out.println(d[N][K]);
32+
}
33+
}

week13/BOJ_1949(우수 마을).java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
private static List<List<Integer>> tree;
7+
private static boolean[] visited;
8+
private static int[][] d;
9+
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
int N = Integer.parseInt(br.readLine());
13+
tree = new ArrayList<>();
14+
visited = new boolean[N+1];
15+
d = new int[N+1][2];
16+
for(int i=0; i<=N; i++) {
17+
tree.add(new ArrayList<>());
18+
}
19+
StringTokenizer st = new StringTokenizer(br.readLine());
20+
for(int i=1; i<=N; i++) {
21+
d[i][1] = Integer.parseInt(st.nextToken());
22+
}
23+
for(int i=0; i<N-1; i++) {
24+
st = new StringTokenizer(br.readLine());
25+
int v1 = Integer.parseInt(st.nextToken());
26+
int v2 = Integer.parseInt(st.nextToken());
27+
tree.get(v1).add(v2);
28+
tree.get(v2).add(v1);
29+
}
30+
visited[1] = true;
31+
dfs(1);
32+
System.out.println(Math.max(d[1][0], d[1][1]));
33+
}
34+
35+
public static void dfs(int n) {
36+
List<Integer> child = tree.get(n);
37+
for(int i=0; i<child.size(); i++) {
38+
int next = child.get(i);
39+
if(!visited[next]) {
40+
visited[next] = true;
41+
dfs(next);
42+
// d[i][0] = i 노드가 우수 마을이 아닌 경우
43+
// d[i][1] = i 노드가 우수 마을인 경우
44+
d[n][0] += Math.max(d[next][0], d[next][1]);
45+
d[n][1] += d[next][0];
46+
}
47+
}
48+
}
49+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
private static boolean[] visited;
7+
private static int N;
8+
private static int[][] d;
9+
private static List<List<Integer>> tree;
10+
11+
public static void main(String[] args) throws IOException {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
N = Integer.parseInt(br.readLine());
14+
d = new int[N+1][2];
15+
tree = new ArrayList<>();
16+
visited = new boolean[N+1];
17+
for(int i=0; i<=N; i++) {
18+
tree.add(new ArrayList<>());
19+
d[i][1] = 1;
20+
}
21+
for(int i=0; i<N-1; i++) {
22+
StringTokenizer st = new StringTokenizer(br.readLine());
23+
int v1 = Integer.parseInt(st.nextToken());
24+
int v2 = Integer.parseInt(st.nextToken());
25+
tree.get(v1).add(v2);
26+
tree.get(v2).add(v1);
27+
}
28+
// d[i][0] : i 노드가 얼리어답터가 아닌 경우의 최소 얼리어답터 수
29+
// d[i][1] : i 노드가 얼리어답터인 경우의 최소 얼리어답터 수
30+
visited[1] = true;
31+
dfs(1);
32+
System.out.println(Math.min(d[1][0], d[1][1]));
33+
}
34+
35+
public static void dfs(int n) {
36+
List<Integer> child = tree.get(n);
37+
for(int i=0; i<child.size(); i++) {
38+
int next = child.get(i);
39+
if(!visited[next]) {
40+
visited[next] = true;
41+
dfs(next);
42+
d[n][0] += d[next][1];
43+
d[n][1] += Math.min(d[next][0], d[next][1]);
44+
}
45+
}
46+
}
47+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
int N = Integer.parseInt(br.readLine());
9+
int[] seat = new int[1000002];
10+
for(int i=0; i<N; i++) {
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
int start = Integer.parseInt(st.nextToken());
13+
int end = Integer.parseInt(st.nextToken());
14+
seat[start]++;
15+
seat[end+1]--;
16+
}
17+
for(int i=1; i<1000001; i++) {
18+
seat[i] += seat[i-1];
19+
}
20+
int Q = Integer.parseInt(br.readLine());
21+
StringTokenizer st = new StringTokenizer(br.readLine());
22+
StringBuilder sb = new StringBuilder();
23+
for(int i=0; i<Q; i++) {
24+
int time = Integer.parseInt(st.nextToken());
25+
sb.append(seat[time]).append('\n');
26+
}
27+
System.out.print(sb);
28+
}
29+
}

0 commit comments

Comments
 (0)