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 a221906

Browse files
Merge pull request #155 from Jewan1120/main
[11주차] 백제완
2 parents fc105bf + a61b4d7 commit a221906

File tree

9 files changed

+507
-0
lines changed

9 files changed

+507
-0
lines changed

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import java.io.BufferedReader;
2+
import java.io.InputStreamReader;
3+
import java.util.StringTokenizer;
4+
5+
public class JW_1052 {
6+
7+
public static void main(String[] args) throws Exception {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
int n = Integer.parseInt(st.nextToken());
11+
int k = Integer.parseInt(st.nextToken());
12+
int cnt = 0;
13+
// k개로 옮기지 못하는 경우
14+
// 2개씩 합쳐서 옮길 수 없는 경우 즉, 2^m의 조합의 수 > k
15+
while (Integer.bitCount(n) > k) {
16+
// 최소한의 수를 더하여 비트 줄이기
17+
cnt += Integer.lowestOneBit(n);
18+
n += Integer.lowestOneBit(n);
19+
}
20+
System.out.println(cnt);
21+
}
22+
}

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

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import java.util.ArrayDeque;
2+
import java.util.ArrayList;
3+
import java.util.Deque;
4+
5+
public class JW_1761 {
6+
7+
static int n;
8+
static ArrayList<ArrayList<Node>> tree = new ArrayList<>();
9+
static int[] depth, dist;
10+
static int[] parent;
11+
12+
static class Node {
13+
int v;
14+
int w;
15+
16+
Node(int v, int w) {
17+
this.v = v;
18+
this.w = w;
19+
}
20+
}
21+
22+
public static void main(String[] args) throws Exception {
23+
n = read();
24+
parent = new int[n + 1];
25+
depth = new int[n + 1];
26+
dist = new int[n + 1];
27+
for (int i = 0; i < n + 1; i++)
28+
tree.add(new ArrayList<>());
29+
for (int i = 0; i < n - 1; i++) {
30+
int u = read(), v = read(), w = read();
31+
tree.get(u).add(new Node(v, w));
32+
tree.get(v).add(new Node(u, w));
33+
}
34+
bfs();
35+
StringBuilder sb = new StringBuilder();
36+
int t = read();
37+
while (t-- > 0) {
38+
int a = read(), b = read();
39+
sb.append(LCA(a, b)).append("\n");
40+
}
41+
System.out.println(sb);
42+
}
43+
44+
static void bfs() {
45+
boolean[] visited = new boolean[n + 1];
46+
Deque<Node> dq = new ArrayDeque<>();
47+
dq.offer(new Node(1, 0));
48+
visited[1] = true;
49+
while (!dq.isEmpty()) {
50+
Node cur = dq.poll();
51+
for (Node next : tree.get(cur.v)) {
52+
if (visited[next.v])
53+
continue;
54+
parent[next.v] = cur.v;
55+
depth[next.v] = depth[cur.v] + 1;
56+
dist[next.v] = dist[cur.v] + next.w;
57+
visited[next.v] = true;
58+
dq.offer(next);
59+
}
60+
}
61+
}
62+
63+
static long LCA(int a, int b) {
64+
long result = dist[a] + dist[b];
65+
int depthA = depth[a];
66+
int depthB = depth[b];
67+
68+
if (depthB < depthA) {
69+
int tmp = a;
70+
a = b;
71+
b = tmp;
72+
}
73+
74+
int diff = Math.abs(depthA - depthB);
75+
for (int i = 0; i < diff; i++)
76+
b = parent[b];
77+
78+
while (a != b) {
79+
a = parent[a];
80+
b = parent[b];
81+
}
82+
return result - 2 * dist[a];
83+
}
84+
85+
private static int read() throws Exception {
86+
int c, n = System.in.read() & 15;
87+
while ((c = System.in.read()) >= 48)
88+
n = (n << 3) + (n << 1) + (c & 15);
89+
if (c == 13)
90+
System.in.read();
91+
return n;
92+
}
93+
}

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import java.io.BufferedReader;
2+
import java.io.InputStreamReader;
3+
import java.util.StringTokenizer;
4+
5+
public class JW_15831 {
6+
7+
public static void main(String[] args) throws Exception {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
int n = Integer.parseInt(st.nextToken());
11+
int b = Integer.parseInt(st.nextToken());
12+
int w = Integer.parseInt(st.nextToken());
13+
boolean[] stones = new boolean[n];
14+
String str = br.readLine();
15+
for (int i = 0; i < n; i++)
16+
stones[i] = str.charAt(i) == 'W';
17+
int l = 0, r = 0; // 투 포인터
18+
int maxLen = 0;
19+
int pb = 0, pw = 0; // 현재 주운 돌의 상태
20+
// 투 포인터 진행
21+
while (r < n) {
22+
if (pb <= b) {
23+
if (stones[r])
24+
pw++;
25+
else
26+
pb++;
27+
r++;
28+
} else {
29+
if (stones[l])
30+
pw--;
31+
else
32+
pb--;
33+
l++;
34+
}
35+
if (pb <= b && pw >= w) {
36+
maxLen = Math.max(maxLen, r - l);
37+
}
38+
}
39+
System.out.println(maxLen);
40+
}
41+
}

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.io.BufferedReader;
2+
import java.io.InputStreamReader;
3+
import java.util.StringTokenizer;
4+
5+
public class Main {
6+
7+
public static void main(String[] args) throws Exception {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
int n = Integer.parseInt(st.nextToken());
11+
int k = Integer.parseInt(st.nextToken());
12+
// 최소 간격으로 나눠줄 때 필요한 수
13+
int need = k * (k + 1) / 2;
14+
if (n < need) {
15+
System.out.println(-1);
16+
return;
17+
}
18+
// 각 바구니의 최솟값 최댓값 계산
19+
int min = n / need, max = min + k - 1;
20+
// 고르게 나눠주고 남아있는 양이 있는지 계산
21+
int remain = (n - need) % k;
22+
// 남은 양이 있다면 최댓값 + 1
23+
if (remain != 0) {
24+
max++;
25+
}
26+
System.out.println(max - min);
27+
}
28+
}

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
public class JW_9466 {
2+
3+
static int n; // 전체 학생 수
4+
static int cnt; // 사이클이 발생한 학생 수
5+
static int[] arr; // 함께하고 싶은 학생을 저장할 배열
6+
7+
static boolean[] visited; // 방문 확인 배열
8+
static boolean[] isCycle; // 사이클 확인 배열
9+
10+
public static void main(String[] args) throws Exception {
11+
int t = read();
12+
StringBuilder sb = new StringBuilder();
13+
while (t-- > 0) {
14+
n = read();
15+
cnt = 0;
16+
arr = new int[n + 1];
17+
visited = new boolean[n + 1];
18+
isCycle = new boolean[n + 1];
19+
for (int i = 1; i <= n; i++)
20+
arr[i] = read();
21+
for (int i = 1; i <= n; i++)
22+
// 방문하지 않은 학생들에 대해서 탐색
23+
if (!visited[i])
24+
recurse(i);
25+
sb.append(n - cnt).append("\n");
26+
}
27+
System.out.println(sb);
28+
}
29+
30+
// 사이클이 발생하는지 재귀로 탐색
31+
private static void recurse(int cur) {
32+
// 방문 처리
33+
visited[cur] = true;
34+
int next = arr[cur]; // 현재 학생이 함께하고 싶은 학생
35+
// 다음 학생이 방문 처리가 되어있지 않다면
36+
if (!visited[next]) {
37+
// 다음 학생 탐색
38+
recurse(next);
39+
40+
// 방문한 학생인데 사이클이 아직 발생하지 않은 학생일 경우
41+
} else if (!isCycle[next]) {
42+
// 현재 학생이 이루는 모든 사이클의 수를 계산
43+
cnt++;
44+
while (next != cur) {
45+
cnt++;
46+
next = arr[next];
47+
}
48+
}
49+
// 현재 재귀에 있는 모든 학생 사이클 체크
50+
// 다른 재귀에서 해당 학생들은 사이클이 발생할 수 없으므로
51+
isCycle[cur] = true;
52+
}
53+
54+
// 빠른 입력 함수
55+
private static int read() throws Exception {
56+
int c, n = System.in.read() & 15;
57+
while ((c = System.in.read()) >= 48)
58+
n = (n << 3) + (n << 1) + (c & 15);
59+
if (c == 13)
60+
System.in.read();
61+
return n;
62+
}
63+
}

0 commit comments

Comments
(0)

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