Skip to content

Commit ffe7495

Browse files
committed
36 week
1 parent e1d3850 commit ffe7495

File tree

3 files changed

+122
-39
lines changed

3 files changed

+122
-39
lines changed

week36/이상억/backjoon/도영이가_만든_맛있는_음식.java

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

44
public class Main {
5-
public static void main(String[] args) throws Exception {
6-
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7-
StringTokenizer st;
8-
9-
st = new StringTokenizer(br.readLine());
10-
int N = Integer.parseInt(st.nextToken());
11-
int K = Integer.parseInt(st.nextToken());
12-
int Q = Integer.parseInt(st.nextToken());
13-
int M = Integer.parseInt(st.nextToken());
14-
15-
boolean[] sleep = new boolean[N + 3]; // 졸고 있는 학생
16-
boolean[] attend = new boolean[N + 3]; // 출석한 학생
17-
18-
st = new StringTokenizer(br.readLine());
19-
for (int i = 0; i < K; i++) {
20-
sleep[Integer.parseInt(st.nextToken())] = true;
21-
}
225

23-
st = new StringTokenizer(br.readLine());
24-
for (int i = 0; i < Q; i++) {
25-
int x = Integer.parseInt(st.nextToken());
26-
if (sleep[x]) continue; // 졸고 있으면 전파 X
6+
static int N;
7+
static int[] S, B;
8+
static int answer = Integer.MAX_VALUE;
279

28-
for (int j = x; j <= N + 2; j += x) {
29-
if (!sleep[j]) {
30-
attend[j] = true;
31-
}
10+
static void dfs(int idx, long sour, long bitter, boolean used) {
11+
if (idx == N) {
12+
if (used) {
13+
answer = Math.min(answer, (int)Math.abs(sour - bitter));
3214
}
15+
return;
3316
}
3417

35-
int[] prefix = new int[N + 3];
36-
for (int i = 3; i <= N + 2; i++) {
37-
prefix[i] = prefix[i - 1] + (attend[i] ? 0 : 1);
38-
}
18+
// 현재 재료 사용
19+
dfs(idx + 1,
20+
sour * S[idx],
21+
bitter + B[idx],
22+
true);
23+
24+
// 현재 재료 사용 안 함
25+
dfs(idx + 1,
26+
sour,
27+
bitter,
28+
used);
29+
}
30+
31+
public static void main(String[] args) throws Exception {
32+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
33+
N = Integer.parseInt(br.readLine());
3934

40-
StringBuilder sb = new StringBuilder();
35+
S = new int[N];
36+
B = new int[N];
4137

42-
for (int i = 0; i < M; i++) {
43-
st = new StringTokenizer(br.readLine());
44-
int S = Integer.parseInt(st.nextToken());
45-
int E = Integer.parseInt(st.nextToken());
46-
sb.append(prefix[E] - prefix[S - 1]).append('\n');
38+
for (int i = 0; i < N; i++) {
39+
StringTokenizer st = new StringTokenizer(br.readLine());
40+
S[i] = Integer.parseInt(st.nextToken());
41+
B[i] = Integer.parseInt(st.nextToken());
4742
}
4843

49-
System.out.print(sb);
44+
dfs(0, 1, 0, false);
45+
System.out.println(answer);
5046
}
5147
}

week36/이상억/backjoon/여행_가자.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,52 @@
33

44

55
public class Main{
6+
7+
static int[] parent;
8+
9+
static int find(int x){
10+
if(parent[x] == x) return x;
11+
return parent[x] = find(parent[x]);
12+
}
13+
14+
static void union(int a, int b){
15+
a = find(a);
16+
b = find(b);
17+
if (a != b) parent[b] = a;
18+
}
19+
20+
621
public static void main(String[] args) throws IOException{
722
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
23+
24+
int N = Integer.parseInt(br.readLine());
25+
int M = Integer.parseInt(br.readLine());
26+
27+
parent = new int[N + 1];
28+
for(int i = 1; i <= N; i++) parent[i] = i;
29+
30+
for(int i = 1; i <= N; i ++){
31+
StringTokenizer st = new StringTokenizer(br.readLine());
32+
for(int j = 1; j <= N; j++){
33+
int connected = Integer.parseInt(st.nextToken());
34+
if(connected == 1){
35+
union(i,j);
36+
}
37+
}
38+
}
39+
40+
StringTokenizer st = new StringTokenizer(br.readLine());
41+
int first_city = Integer.parseInt(st.nextToken());
42+
int root = find(first_city);
43+
44+
while(st.hasMoreTokens()){
45+
int city = Integer.parseInt(st.nextToken());
46+
if(find(city) != root){
47+
System.out.println("NO");
48+
return;
49+
}
50+
}
51+
52+
System.out.println("YES");
853
}
954
}
Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,51 @@
11
import java.io.*;
22
import java.util.*;
33

4-
5-
public class Main{
6-
public static void main(String[] args) throws IOException{
4+
public class Main {
5+
public static void main(String[] args) throws Exception {
76
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
StringTokenizer st;
8+
9+
st = new StringTokenizer(br.readLine());
10+
int N = Integer.parseInt(st.nextToken());
11+
int K = Integer.parseInt(st.nextToken());
12+
int Q = Integer.parseInt(st.nextToken());
13+
int M = Integer.parseInt(st.nextToken());
14+
15+
boolean[] sleep = new boolean[N + 3]; // 졸고 있는 학생
16+
boolean[] attend = new boolean[N + 3]; // 출석한 학생
17+
18+
st = new StringTokenizer(br.readLine());
19+
for (int i = 0; i < K; i++) {
20+
sleep[Integer.parseInt(st.nextToken())] = true;
21+
}
22+
23+
st = new StringTokenizer(br.readLine());
24+
for (int i = 0; i < Q; i++) {
25+
int x = Integer.parseInt(st.nextToken());
26+
if (sleep[x]) continue; // 졸고 있으면 전파 X
27+
28+
for (int j = x; j <= N + 2; j += x) {
29+
if (!sleep[j]) {
30+
attend[j] = true;
31+
}
32+
}
33+
}
34+
35+
int[] prefix = new int[N + 3];
36+
for (int i = 3; i <= N + 2; i++) {
37+
prefix[i] = prefix[i - 1] + (attend[i] ? 0 : 1);
38+
}
39+
40+
StringBuilder sb = new StringBuilder();
41+
42+
for (int i = 0; i < M; i++) {
43+
st = new StringTokenizer(br.readLine());
44+
int S = Integer.parseInt(st.nextToken());
45+
int E = Integer.parseInt(st.nextToken());
46+
sb.append(prefix[E] - prefix[S - 1]).append('\n');
47+
}
48+
49+
System.out.print(sb);
850
}
951
}

0 commit comments

Comments
 (0)