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 62776cc

Browse files
Merge pull request #280 from icegosimperson/main
[20μ£Όμ°¨] μ΄ν˜œμ›
2 parents c393535 + 55aab40 commit 62776cc

File tree

10 files changed

+506
-0
lines changed

10 files changed

+506
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
6+
import java.util.List;
7+
import java.util.StringTokenizer;
8+
9+
class HW_1967_2{
10+
static List<Node>[] graph;
11+
static boolean[] visited;
12+
static int ans=0; // 트리의 지름
13+
static int farNode=1; // κ°€μž₯ λ¨Ό λ…Έλ“œ
14+
static class Node{
15+
int e, weight;
16+
Node (int e, int weight){
17+
this.e = e;
18+
this.weight = weight;
19+
}
20+
}
21+
public static void main(String[] args) throws IOException {
22+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
23+
StringTokenizer st;
24+
int n = Integer.parseInt(br.readLine()); // λ…Έλ“œμ˜ 개수
25+
26+
graph = new ArrayList[n+1];
27+
visited = new boolean[n + 1];
28+
29+
for(int i=1; i<=n; i++){
30+
graph[i] = new ArrayList<>();
31+
}
32+
for(int i=0; i<n-1; i++){
33+
st = new StringTokenizer(br.readLine());
34+
int s = Integer.parseInt(st.nextToken());
35+
int e = Integer.parseInt(st.nextToken());
36+
int weight = Integer.parseInt(st.nextToken());
37+
38+
graph[s].add(new Node(e, weight)); // μ–‘λ°©ν–₯
39+
graph[e].add(new Node(s, weight));
40+
}
41+
dfs(1, 0); // 루트 λ…Έλ“œμ—μ„œ κ°€μž₯ λ¨Ό λ…Έλ“œ μ°ΎκΈ°
42+
43+
visited = new boolean[n + 1];
44+
visited[farNode] = true;
45+
dfs(farNode, 0);
46+
47+
System.out.println(ans);
48+
}
49+
private static void dfs(int node, int dist){
50+
visited[node] = true;
51+
52+
if(ans < dist){
53+
ans = dist;
54+
farNode = node;
55+
}
56+
57+
// for(μš”μ†Œνƒ€μž… λ³€μˆ˜λͺ… : λ°°μ—΄ or μ»¬λ ‰μ…˜)
58+
for(Node n : graph[node]){
59+
if(!visited[n.e]){
60+
dfs(n.e, dist + n.weight);
61+
}
62+
}
63+
}
64+
}
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.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.LinkedList;
5+
import java.util.*;
6+
7+
// κ°€μž₯ μΈμ ‘ν•œ 두 곡유기 μ‚¬μ΄μ˜ μ΅œλŒ€ 거리
8+
class HW_2110_2{
9+
public static void main(String[] args) throws IOException {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
int N = Integer.parseInt(st.nextToken()); // μ§‘μ˜ 개수
13+
int C = Integer.parseInt(st.nextToken()); // 곡유기의 개수
14+
15+
int[] arr = new int[N];
16+
for(int i=0; i<N; i++) {
17+
arr[i] = Integer.parseInt(br.readLine());
18+
}
19+
Arrays.sort(arr);
20+
int s=1;
21+
int e = arr[N - 1] - arr[0];
22+
int ans = 0;
23+
24+
while(s<=e){ // Upper Bound
25+
int start = arr[0];
26+
int cnt = 1; // 첫번째 집은 μ„€μΉ˜
27+
int mid = (s+e)/2; // 곡유기 μ‚¬μ΄μ˜ μ΅œμ†Œ 거리
28+
for(int i=1; i<N; i++){
29+
if(mid <= arr[i]-start){
30+
cnt++;
31+
start = arr[i];
32+
}
33+
}
34+
if(C <= cnt){
35+
ans = mid;
36+
s = mid+1;
37+
} else e = mid-1;
38+
}
39+
System.out.println(ans);
40+
}
41+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
// μ‹œκ°„ λ³΅μž‘λ„ : N <= 10^6, M <=2*10^9, O(N logN)
8+
9+
class HW_2805_2{
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
StringTokenizer st = new StringTokenizer(br.readLine());
13+
14+
int N = Integer.parseInt(st.nextToken());
15+
int M = Integer.parseInt(st.nextToken());
16+
int[] arr = new int[N];
17+
int s=0, e = 0;
18+
19+
st = new StringTokenizer(br.readLine());
20+
for(int i=0;i <N; i++){
21+
arr[i] = Integer.parseInt(st.nextToken());
22+
e = Math.max(e, arr[i]);
23+
}
24+
25+
Arrays.sort(arr);
26+
while(s<=e){
27+
int mid = (s+e)/2;
28+
long sum = 0;
29+
for(int h : arr){
30+
if(0 < h-mid) {
31+
sum += h - mid;
32+
}
33+
}
34+
if(sum < M){
35+
e = mid-1;
36+
}
37+
else{
38+
s = mid + 1;
39+
}
40+
}
41+
System.out.println(e);
42+
}
43+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
class HW_5021_2 {
5+
static Map<String, List<String>> graph = new HashMap<>(); // λΆ€λͺ¨ 정보λ₯Ό μ €μž₯ν•˜λŠ” κ·Έλž˜ν”„
6+
static Map<String, Double> blood = new HashMap<>(); // ν˜ˆν†΅ λΉ„μœ¨ μ €μž₯
7+
static String king; // μ™•μ‘° μ°½μ‹œμž
8+
9+
public static void main(String[] args) throws IOException {
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 M = Integer.parseInt(st.nextToken()); // 후보 수
15+
king = br.readLine(); // μ™•μ‘° μ°½μ‹œμž 이름
16+
17+
blood.put(king, 1.0); // μ°½μ‹œμžμ˜ ν˜ˆν†΅ ν™•λ₯ μ€ 1.0
18+
19+
// κ·Έλž˜ν”„ 및 ν˜ˆν†΅ μ΄ˆκΈ°ν™”
20+
for (int i = 0; i < N; i++) {
21+
st = new StringTokenizer(br.readLine());
22+
String child = st.nextToken();
23+
String parent1 = st.nextToken();
24+
String parent2 = st.nextToken();
25+
26+
// λΆ€λͺ¨ μ—°κ²° 정보 μ €μž₯ (μžμ‹ -> λΆ€λͺ¨ 리슀트)
27+
graph.putIfAbsent(parent1, new ArrayList<>());
28+
graph.putIfAbsent(parent2, new ArrayList<>());
29+
graph.putIfAbsent(child, new ArrayList<>());
30+
graph.get(child).add(parent1);
31+
graph.get(child).add(parent2);
32+
33+
// ν˜ˆν†΅ 정보 μ΄ˆκΈ°ν™” (μ—†λ‹€λ©΄ 0.0)
34+
blood.putIfAbsent(parent1, 0.0);
35+
blood.putIfAbsent(parent2, 0.0);
36+
blood.putIfAbsent(child, 0.0);
37+
}
38+
39+
// BFSλ₯Ό 톡해 ν˜ˆν†΅ ν™•λ₯  계산
40+
bfs();
41+
42+
// μ™•μœ„ κ³„μŠΉμž μ°ΎκΈ°
43+
String successor = "";
44+
double maxBlood = -1.0;
45+
46+
for (int i = 0; i < M; i++) {
47+
String candidate = br.readLine();
48+
if (blood.containsKey(candidate) && blood.get(candidate) > maxBlood) {
49+
maxBlood = blood.get(candidate);
50+
successor = candidate;
51+
}
52+
}
53+
54+
System.out.println(successor);
55+
}
56+
57+
// BFSλ₯Ό μ΄μš©ν•œ ν˜ˆν†΅ ν™•λ₯  계산
58+
private static void bfs() {
59+
Queue<String> queue = new LinkedList<>();
60+
61+
// μ°½μ‹œμž(μ™•μ‘° μ‹œμž‘ 인물)λΆ€ν„° μ‹œμž‘
62+
queue.add(king);
63+
64+
while (!queue.isEmpty()) {
65+
String person = queue.poll();
66+
67+
if (!graph.containsKey(person)) continue; // λΆ€λͺ¨κ°€ μ—†λŠ” 경우 μŠ€ν‚΅
68+
69+
for (String child : graph.keySet()) {
70+
List<String> parents = graph.get(child);
71+
if (parents.size() < 2) continue; // λΆ€λͺ¨κ°€ μ—†μœΌλ©΄ λ¬΄μ‹œ
72+
73+
double parent1Blood = blood.getOrDefault(parents.get(0), 0.0);
74+
double parent2Blood = blood.getOrDefault(parents.get(1), 0.0);
75+
76+
double newBlood = (parent1Blood + parent2Blood) / 2.0;
77+
78+
if (newBlood > blood.get(child)) { // μƒˆλ‘œμš΄ ν˜ˆν†΅μ΄ 더 크면 κ°±μ‹ 
79+
blood.put(child, newBlood);
80+
queue.add(child); // ν˜ˆν†΅μ΄ κ°±μ‹ λœ 경우 μžμ‹μ„ 큐에 μΆ”κ°€
81+
}
82+
}
83+
}
84+
}
85+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.StringTokenizer;
5+
6+
// μ‹œκ°„λ³΅μž‘λ„ : N! (<=100) μ‹œκ°„ 초과 -> dp둜 쀑볡 계산 쀄이기
7+
// ν•„μš”ν•œ λ©”λͺ¨λ¦¬ M λ°”μ΄νŠΈλ₯Ό ν™•λ³΄ν•˜κΈ° μœ„ν•œ μ•± λΉ„ν™œμ„±ν™”μ˜ μ΅œμ†Œμ˜ λΉ„μš©μ„ 계산
8+
// λ©”λͺ¨λ¦¬ ν™œμ„±ν™” or λΉ„ν™œμ„±ν™”
9+
class HW_7579_2{
10+
static int[] coins;
11+
public static void main(String[] args) throws IOException {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
StringTokenizer st = new StringTokenizer(br.readLine());
14+
int N = Integer.parseInt(st.nextToken()); // ν™œμ„±ν™” λ˜μ–΄ μžˆλŠ” μ•±μ˜ 개수
15+
int M = Integer.parseInt(st.nextToken()); // M λ°”μ΄νŠΈ 이상 λ©”λͺ¨λ¦¬ μΆ”κ°€ 확보
16+
int[] apps = new int[N];
17+
st = new StringTokenizer(br.readLine());
18+
for(int i=0; i<N; i++){ // μ‚¬μš©μ€‘μΈ λ°”μ΄νŠΈ 수
19+
apps[i] = Integer.parseInt(st.nextToken());
20+
}
21+
22+
st = new StringTokenizer(br.readLine());
23+
int[] costs = new int[N];
24+
int sum =0;
25+
for(int i=0; i<N; i++){ // λΉ„ν™œμ„±ν™” ν–ˆμ„ 경우 λΉ„μš©
26+
costs[i] = Integer.parseInt(st.nextToken());
27+
sum += costs[i];
28+
}
29+
30+
int[] dp = new int[sum+1];
31+
for(int i=0; i<N; i++){
32+
for(int j=sum; costs[i]<=j; j--){
33+
dp[j] = Math.max(dp[j], dp[j-costs[i]] + apps[i]);
34+
}
35+
}
36+
37+
for(int i=0; i<=sum; i++){
38+
if(M<=dp[i]){
39+
System.out.println(i);
40+
break;
41+
}
42+
}
43+
44+
}
45+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.StringTokenizer;
5+
6+
// μ‹œκ°„λ³΅μž‘λ„ : N! (<=20) μ‹œκ°„ 초과 -> dp둜 쀑볡 계산 쀄이기
7+
8+
class HW_9084_2{
9+
static int[] coins;
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
StringTokenizer st;
13+
int T = Integer.parseInt(br.readLine());
14+
15+
while(T-->0){
16+
int N = Integer.parseInt(br.readLine());
17+
coins = new int[N];
18+
st = new StringTokenizer(br.readLine());
19+
for(int i=0; i<N; i++){
20+
coins[i] = Integer.parseInt(st.nextToken());
21+
}
22+
int M = Integer.parseInt(br.readLine());
23+
int[] dp = new int[M + 1];
24+
dp[0] = 1; // 0원
25+
for(int i=0; i<N; i++ ){
26+
for(int j=coins[i]; j<M+1; j++){
27+
dp[j] += dp[j - coins[i]]; // κΈˆμ•‘ jλ§Œλ“€ λ•Œ 동전(coin)μΆ”κ°€
28+
}
29+
}
30+
System.out.println(dp[M]);
31+
}
32+
}
33+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import java.awt.*;
2+
import java.io.BufferedReader;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
6+
class HW_9205_2{
7+
static class Node{
8+
int x, y;
9+
public Node(int x, int y){
10+
this.x = x;
11+
this.y = y;
12+
}
13+
}
14+
public static void main(String[] args) throws IOException {
15+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
16+
StringTokenizer st;
17+
18+
int t = Integer.parseInt(br.readLine());
19+
20+
while(t-->0){
21+
int n = Integer.parseInt(br.readLine()); // 편의점 개수
22+
Node[] nodes = new Node[n + 2];
23+
for(int i=0; i<n+2; i++) {
24+
st = new StringTokenizer(br.readLine());
25+
int x = Integer.parseInt(st.nextToken());
26+
int y = Integer.parseInt(st.nextToken());
27+
nodes[i] = new Node(x, y);
28+
}
29+
System.out.println(Bfs(nodes, n) ? "happy" : "sad");
30+
}
31+
}
32+
private static boolean Bfs(Node[] nodes, int n) {
33+
Queue<Node> queue = new LinkedList<>();
34+
boolean[] visited = new boolean[n + 2];
35+
queue.add(nodes[0]); // μ‹œμž‘(μ§‘)
36+
visited[0] =true;
37+
while(!queue.isEmpty()){
38+
Node cur = queue.poll();
39+
if(cal(cur, nodes[n+1]) <=1000){ // ν˜„μž¬ 지점과 거리 계산
40+
return true;
41+
}
42+
for(int i=1; i<n+2; i++){ // 편의점(1~n), νŽ˜μŠ€ν‹°λ²Œ(n+1) λͺ¨λ‘ λ°©λ¬Έν•  수 μžˆλŠ”μ§€ 탐색
43+
if(!visited[i] && cal(cur, nodes[i]) <= 1000){ // 이동 κ°€λŠ₯ν•œ μ§€
44+
visited[i] = true;
45+
queue.add(nodes[i]);
46+
}
47+
}
48+
}
49+
return false;
50+
}
51+
private static int cal(Node a, Node b){
52+
return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);
53+
}
54+
}

0 commit comments

Comments
(0)

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /