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 9aac077

Browse files
Merge pull request #152 from yeongleej/main
[11주차] 이지영
2 parents 748de6b + 819c73a commit 9aac077

File tree

9 files changed

+618
-0
lines changed

9 files changed

+618
-0
lines changed

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package day1120;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class JY_1052 {
7+
8+
public static void main(String[] args) throws IOException{
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
12+
int N = Integer.parseInt(st.nextToken());
13+
int K = Integer.parseInt(st.nextToken());
14+
15+
if(K >= N) {
16+
System.out.println(0);
17+
return;
18+
}
19+
20+
// N은 2^i가 되어야 함
21+
for(int k=0; k<K-1; k++) {
22+
int i = 0;
23+
while(Math.pow(2, i) < N) {
24+
i++;
25+
}
26+
N -= Math.pow(2, (i-1));
27+
28+
if(N == 0) {
29+
System.out.println(0);
30+
return;
31+
}
32+
}
33+
34+
35+
int i = 0;
36+
while(Math.pow(2, i) < N) {
37+
i++;
38+
}
39+
int ans = (int)Math.pow(2, i) - N;
40+
System.out.println(ans);
41+
}
42+
43+
}

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

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package day1119;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class JY_1716 {
7+
8+
static int N, M;
9+
static int[] d, parent, distance;
10+
static boolean[] c;
11+
static List<Node>[] g;
12+
static class Node {
13+
int n, dist;
14+
15+
public Node(int n, int dist) {
16+
super();
17+
this.n = n;
18+
this.dist = dist;
19+
}
20+
21+
@Override
22+
public String toString() {
23+
return "Node [n=" + n + ", dist=" + dist + "]";
24+
}
25+
26+
}
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+
34+
// 부모 노드 정보 배열
35+
parent = new int[N+1];
36+
37+
// 깊이 정보 배열
38+
d = new int[N+1];
39+
40+
// 깊이 계산 여부 배열
41+
c = new boolean[N+1];
42+
43+
// 루트노드로 부터의 거리
44+
distance = new int[N+1];
45+
46+
g = new ArrayList[N+1];
47+
for(int i=0; i<N+1; i++) {
48+
g[i] = new ArrayList<>();
49+
}
50+
51+
for(int i=0; i<N-1; i++) {
52+
st = new StringTokenizer(br.readLine());
53+
int a = Integer.parseInt(st.nextToken());
54+
int b = Integer.parseInt(st.nextToken());
55+
int dist = Integer.parseInt(st.nextToken());
56+
g[a].add(new Node(b, dist));
57+
g[b].add(new Node(a, dist));
58+
}
59+
60+
// 깊이 구하기
61+
dfs(1, 0, 0);
62+
63+
st = new StringTokenizer(br.readLine());
64+
M = Integer.parseInt(st.nextToken());
65+
66+
StringBuilder sb = new StringBuilder();
67+
for(int i=0; i<M; i++) {
68+
st = new StringTokenizer(br.readLine());
69+
int n1 = Integer.parseInt(st.nextToken());
70+
int n2 = Integer.parseInt(st.nextToken());
71+
int p = lca(n1, n2);
72+
73+
int ans = distance[n1]+distance[n2] - 2*distance[p];
74+
75+
sb.append(ans+"\n");
76+
}
77+
78+
System.out.println(sb.toString());
79+
80+
}
81+
public static void dfs(int x, int depth, int dist) {
82+
c[x] = true;
83+
d[x] = depth;
84+
distance[x] = dist;
85+
86+
for(Node next: g[x]) {
87+
if(c[next.n]) continue;
88+
89+
parent[next.n] = x;
90+
dfs(next.n, depth+1, dist+next.dist);
91+
}
92+
}
93+
public static int lca(int a, int b) {
94+
while(d[a] != d[b]) {
95+
if(d[a] > d[b]) {
96+
a = parent[a];
97+
} else {
98+
b = parent[b];
99+
}
100+
}
101+
102+
while(a != b) {
103+
a = parent[a];
104+
b = parent[b];
105+
}
106+
return a;
107+
}
108+
109+
}

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package day1122;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class JY_15831 {
7+
8+
public static void main(String[] args) throws IOException{
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
12+
int N = Integer.parseInt(st.nextToken());
13+
int B = Integer.parseInt(st.nextToken());
14+
int W = Integer.parseInt(st.nextToken());
15+
16+
String srr = br.readLine();
17+
18+
int s = 0;
19+
int e = 0;
20+
int bc = 0;
21+
int wc = 0;
22+
int ans = 0;
23+
24+
while(e < N) {
25+
// 조약돌 개수 카운트
26+
if(srr.charAt(e) == 'B') bc++;
27+
else wc++;
28+
29+
// 검은 조약돌이 B개 보다 많으면 시작점 증가로 구간 감소시키기
30+
if(bc > B) {
31+
if(srr.charAt(s)=='B') bc--;
32+
else wc--;
33+
s++;
34+
}
35+
36+
// 준표가 만족하는 조약돌 개수
37+
if(wc >= W && bc <= B) {
38+
ans = Math.max(ans, (e-s)+1);
39+
}
40+
41+
e++;
42+
}
43+
System.out.println(ans);
44+
45+
}
46+
47+
}

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package day1122;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class JY_19939 {
7+
8+
public static void main(String[] args) throws IOException{
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
12+
int N = Integer.parseInt(st.nextToken());
13+
int K = Integer.parseInt(st.nextToken());
14+
15+
int[] arr = new int[K];
16+
int cnt = 0;
17+
// 초기값 : 1부터 K개까지 분배
18+
for(int i=0; i<K; i++) {
19+
arr[i] = (i+1);
20+
cnt += arr[i];
21+
}
22+
23+
if(cnt > N) {
24+
System.out.println(-1);
25+
return;
26+
}
27+
28+
N -= cnt;
29+
int val = N / K;
30+
for(int i=0; i<K; i++) {
31+
arr[i] += val;
32+
}
33+
if(N % K != 0) {
34+
int re = N % K;
35+
36+
// 맨 뒤부터 1씩 증가하기
37+
int idx = K-1;
38+
while(re > 0) {
39+
arr[idx]++;
40+
idx--;
41+
re--;
42+
}
43+
}
44+
45+
// System.out.println(Arrays.toString(arr));
46+
System.out.println(arr[K-1]-arr[0]);
47+
48+
}
49+
50+
}

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

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package day1121;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class JY_9466 {
7+
8+
static int T, N;
9+
static int[] g;
10+
static boolean[] visited, finished;
11+
static int cnt;
12+
13+
public static void main(String[] args) throws IOException {
14+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15+
StringTokenizer st = new StringTokenizer(br.readLine());
16+
17+
T = Integer.parseInt(st.nextToken());
18+
19+
StringBuilder sb = new StringBuilder();
20+
for(int t=0; t<T; t++) {
21+
st = new StringTokenizer(br.readLine());
22+
N = Integer.parseInt(st.nextToken());
23+
g = new int[N+1];
24+
25+
st = new StringTokenizer(br.readLine());
26+
for(int i=1; i<N+1; i++) {
27+
g[i] = Integer.parseInt(st.nextToken());
28+
}
29+
30+
visited = new boolean[N+1];
31+
finished = new boolean[N+1];
32+
cnt = N;
33+
for(int i=1; i<N+1; i++) {
34+
if(visited[i]) continue;
35+
dfs(i);
36+
}
37+
38+
sb.append(cnt+"\n");
39+
40+
}
41+
System.out.println(sb.toString());
42+
43+
}
44+
public static void dfs(int now) {
45+
visited[now] = true;
46+
47+
int next = g[now];
48+
49+
// 아직 방문하지 않은 곳
50+
if(!visited[next]) {
51+
dfs(next);
52+
}
53+
// 순환 발생
54+
else {
55+
// 사이클 시작점으로 돌아감
56+
while(!finished[next]) {
57+
finished[next] = true;
58+
next = g[next];
59+
cnt--;
60+
}
61+
62+
}
63+
finished[now] = true;
64+
65+
}
66+
67+
}

0 commit comments

Comments
(0)

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