Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 748de6b

Browse files
Merge pull request #151 from GreatAlgorithm-Study/dahye
[11주차] 고다혜
2 parents 35c48c1 + 1e78e9e commit 748de6b

File tree

10 files changed

+599
-0
lines changed

10 files changed

+599
-0
lines changed

‎BOJ/1000-5000번/DH_1052.java‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
/*
5+
* 물병
6+
*/
7+
8+
public class DH_1052 {
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
13+
int n = Integer.parseInt(st.nextToken());
14+
int k = Integer.parseInt(st.nextToken());
15+
16+
int answer = 0;
17+
18+
while(Integer.bitCount(n) > k) {
19+
answer += 1;
20+
n += 1;
21+
}
22+
23+
System.out.println(answer);
24+
}
25+
}

‎BOJ/1000-5000번/DH_1761.java‎

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
/*
5+
* 정점들의 거리
6+
*/
7+
8+
public class DH_1761 {
9+
static class Node {
10+
int e, w;
11+
public Node(int e, int w) {
12+
this.e = e;
13+
this.w = w;
14+
}
15+
}
16+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
17+
static StringBuilder sb = new StringBuilder();
18+
static StringTokenizer st;
19+
static int N;
20+
static ArrayList<Node> adj[];
21+
static int[] depth, p, dis;
22+
23+
public static void main(String[] args) throws Exception {
24+
initInput();
25+
solution();
26+
}
27+
28+
static void solution() throws Exception {
29+
bfs();
30+
getDis();
31+
}
32+
33+
static void getDis() throws Exception {
34+
int M = Integer.parseInt(br.readLine());
35+
36+
for(int i = 0; i < M; i++) {
37+
st = new StringTokenizer(br.readLine());
38+
39+
int a = Integer.parseInt(st.nextToken());
40+
int b = Integer.parseInt(st.nextToken());
41+
42+
// a, b의 최소공통조상 구하고, 두 점 간 사이 구하기
43+
sb.append(LCA(a, b)).append("\n");
44+
}
45+
46+
System.out.print(sb);
47+
}
48+
49+
static long LCA(int a, int b) {
50+
// result = (루트 ~ a) + (루트 ~ b) - 2 * (루트 ~ 최소공통조상)
51+
long result = dis[a] + dis[b];
52+
53+
int depthA = depth[a];
54+
int depthB = depth[b];
55+
56+
// 무조건 a가 depth가 작도록
57+
if(depthB < depthA) {
58+
int tmp = a;
59+
a = b;
60+
b = tmp;
61+
}
62+
63+
int diffDis = Math.abs(depthA - depthB);
64+
65+
// 깊이 맞추기
66+
for(int i = 0; i < diffDis; i++) b = p[b];
67+
68+
while(a != b) {
69+
a = p[a];
70+
b = p[b];
71+
}
72+
73+
return result - 2 * dis[a];
74+
}
75+
76+
static void bfs() {
77+
boolean[] v = new boolean[N + 1];
78+
79+
Queue<Node> q = new ArrayDeque<>();
80+
q.add(new Node(1, 0));
81+
v[1] = true;
82+
83+
while(!q.isEmpty()) {
84+
Node current = q.poll();
85+
86+
for(Node next: adj[current.e]) {
87+
if(v[next.e]) continue;
88+
p[next.e] = current.e;
89+
depth[next.e] = depth[current.e] + 1;
90+
dis[next.e] = dis[current.e] + next.w;
91+
v[next.e] = true;
92+
q.add(next);
93+
}
94+
}
95+
96+
}
97+
98+
static void initInput() throws Exception {
99+
br = new BufferedReader(new InputStreamReader(System.in));
100+
N = Integer.parseInt(br.readLine());
101+
102+
adj = new ArrayList[N + 1];
103+
depth = new int[N + 1];
104+
dis = new int[N + 1];
105+
p = new int[N + 1];
106+
107+
for(int i = 0; i < adj.length; i++) adj[i] = new ArrayList<>();
108+
109+
for(int i = 0; i < N - 1; i++) {
110+
st = new StringTokenizer(br.readLine());
111+
112+
int s = Integer.parseInt(st.nextToken());
113+
int e = Integer.parseInt(st.nextToken());
114+
int w = Integer.parseInt(st.nextToken());
115+
adj[s].add(new Node(e, w));
116+
adj[e].add(new Node(s, w));
117+
}
118+
}
119+
}

‎BOJ/15001-20000번/DH_15831.java‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
/*
5+
* 준표의 조약돌
6+
*/
7+
8+
public class DH_15831 {
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
13+
int N = Integer.parseInt(st.nextToken()); // 조약돌의 총 개수
14+
int B = Integer.parseInt(st.nextToken()); // 검은 조약돌의 최대 개수
15+
int W = Integer.parseInt(st.nextToken()); // 하얀 조약돌의 최소 개수
16+
17+
String str = br.readLine();
18+
19+
int s = 0, e = 0, bCnt = 0, wCnt = 0, answer = 0;
20+
21+
while(e < N) {
22+
if(B < bCnt) { // 검정 조약돌의 개수가 크다면 start 지점 오른쪽으로
23+
if(str.charAt(s) == 'B') bCnt -= 1;
24+
else wCnt -= 1;
25+
s += 1;
26+
} else { // 하얀 조약돌의 개수가 작다면 end 지점 오른쪽으로
27+
if(str.charAt(e) == 'B') bCnt += 1;
28+
else wCnt += 1;
29+
30+
e += 1;
31+
}
32+
33+
if(bCnt <= B && wCnt >= W) answer = Math.max(answer, e - s);
34+
}
35+
36+
System.out.println(answer);
37+
}
38+
}

‎BOJ/15001-20000번/DH_19939.java‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
/*
5+
* 박 터뜨리기
6+
*/
7+
8+
public class DH_19939 {
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
13+
int N = Integer.parseInt(st.nextToken());
14+
int K = Integer.parseInt(st.nextToken());
15+
16+
System.out.println(solution(N, K));
17+
}
18+
19+
static int solution(int N, int K) {
20+
int sum = K * (K + 1) / 2; // 1부터 K까지의 합
21+
int min = 1, max = K, answer = 0;
22+
if(N < sum) return -1;
23+
24+
while(N > sum) N -= K;
25+
26+
answer = max - min;
27+
if(sum != N) answer += 1;
28+
29+
return answer;
30+
}
31+
}

‎BOJ/5001-10000번/DH_9466.java‎

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
/*
5+
* 텀 프로젝트
6+
*/
7+
8+
public class DH_9466 {
9+
10+
static int cnt;
11+
static int[] arr;
12+
static boolean[] check, v;
13+
14+
public static void main(String[] args) throws Exception {
15+
System.setIn(new FileInputStream("./input/DH_9466.txt"));
16+
17+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
18+
StringBuilder sb = new StringBuilder();
19+
StringTokenizer st;
20+
21+
int t = Integer.parseInt(br.readLine());
22+
23+
for(int tc = 0; tc < t; tc++) {
24+
int n = Integer.parseInt(br.readLine());
25+
arr = new int[n + 1];
26+
check = new boolean[n + 1];
27+
v = new boolean[n + 1];
28+
cnt = 0;
29+
30+
st = new StringTokenizer(br.readLine());
31+
for(int i = 1; i < arr.length; i++) arr[i] = Integer.parseInt(st.nextToken());
32+
33+
for(int i = 1; i < arr.length; i++) {
34+
if(check[i]) continue; // 확인한 학생이라면 건너뛰기
35+
dfs(i, i);
36+
}
37+
sb.append(arr.length - 1 - cnt).append("\n");
38+
}
39+
40+
System.out.println(sb);
41+
}
42+
43+
static void dfs(int start, int current) {
44+
if(check[current]) return;
45+
46+
// 사이클이 발생한 경우
47+
if(v[current]) {
48+
check[current] = true;
49+
cnt += 1;
50+
}
51+
52+
v[current] = true;
53+
dfs(start, arr[current]);
54+
55+
check[current] = true; // 확인 표시
56+
v[current] = false; // 원상복구
57+
}
58+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /