-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into 5-janghw0126
- Loading branch information
Showing
10 changed files
with
388 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from collections import deque | ||
|
||
def solution(n, edge): | ||
graph = [[] for _ in range(n + 1)] | ||
visited = [0] * (n + 1) | ||
|
||
# 인접 리스트 방식의 그래프 구현 | ||
for a, b in edge: | ||
graph[a].append(b) | ||
graph[b].append(a) | ||
|
||
queue = deque([(1)]) | ||
visited[1] = 1 | ||
|
||
while queue: | ||
x = queue.popleft() | ||
for nx in graph[x]: | ||
if not visited[nx]: # 방문한 적이 없는 경우 | ||
visited[nx] = visited[x] + 1 # 거리 계산 | ||
queue.append(nx) | ||
|
||
max_value = max(visited) | ||
return visited.count(max_value) # 최댓값을 가지는 요소의 개수 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
// 3차시 2024.07.24.수 : 백준 - 휴게소 세우기(1477) | ||
import java.io.BufferedReader | ||
import java.io.InputStreamReader | ||
import java.util.StringTokenizer | ||
|
||
fun main() { | ||
// ✅ Input | ||
val br = BufferedReader(InputStreamReader(System.`in`)) | ||
var st = StringTokenizer(br.readLine()) | ||
|
||
val N = st.nextToken().toInt() // 현재 휴게소의 개수 | ||
var M = st.nextToken().toInt() // 더 지으려고 하는 휴게소의 개수 | ||
val L = st.nextToken().toInt() // 고속도로의 길이 | ||
|
||
val position = mutableListOf<Int>() // 휴게소의 위치 | ||
position.add(0) // 시작 위치 | ||
position.add(L) // 끝 위치 | ||
st = StringTokenizer(br.readLine()) | ||
for(i: Int in 1..N) { | ||
position.add(st.nextToken().toInt()) | ||
} | ||
|
||
// ✅ Solve | ||
position.sort() // 오름차순 정렬 | ||
|
||
var left = 1 // 0으로 하면 런타임 에러 (/ by zero) 발생 | ||
var right = L | ||
while(left <= right) { | ||
var mid: Int = (left + right) / 2 // 최대 길이 | ||
|
||
var cnt = 0 | ||
// 최대 mid 길이만큼씩 떨어지게 휴게소 배치했을 때, 필요한 새 휴게소의 개수 | ||
for(i: Int in 1..position.size - 1) { | ||
cnt += (position[i] - position[i - 1] - 1) / mid | ||
// 1을 빼주는 이유: i번 휴게소와 i-1번 휴게소 사이의 거리가 mid의 배수라면 새 휴게소가 하나 덜 필요함 | ||
} | ||
|
||
// 필요한 휴게소의 개수가 M개 이상이라면, 최대 길이를 늘려야 함 | ||
if(cnt > M) left = mid + 1 | ||
// M개 이하라면, 더 짧은 길이를 최대로 해도 가능한지 체크하기 위해 최대 길이 줄이기 | ||
else right = mid - 1 | ||
} | ||
|
||
// ✅ Output | ||
print(left) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// 4차시 2024.07.27.토 : 백준 - 개미굴(14725) | ||
import java.io.BufferedReader | ||
import java.io.InputStreamReader | ||
import java.util.StringTokenizer | ||
|
||
const val DEPTH_STRING = "--" | ||
|
||
data class Node( | ||
var feed: String, // 먹이 | ||
var nodes: MutableList<Node> | ||
) | ||
|
||
var answer: StringBuilder = StringBuilder() | ||
|
||
fun main() { | ||
val br = BufferedReader(InputStreamReader(System.`in`)) | ||
|
||
val N = br.readLine().toInt() | ||
|
||
val root = Node("", mutableListOf()) | ||
|
||
for(i: Int in 1..N) { | ||
val st = StringTokenizer(br.readLine()) | ||
val num = st.nextToken().toInt() | ||
|
||
// 트리로 정리 | ||
var parent = root | ||
for(j: Int in 1..num) { | ||
val currentFeed = st.nextToken() | ||
var index = -1 | ||
// 부모 노드에 이미 존재하는지 확인 | ||
for(k: Int in 0..parent.nodes.size - 1) { | ||
if(parent.nodes[k].feed.equals(currentFeed)) { | ||
index = k | ||
break | ||
} | ||
} | ||
// 존재하지 않을 경우 자식으로 추가 | ||
if(index == -1) { | ||
parent.nodes.add(Node(currentFeed, mutableListOf())) | ||
index = parent.nodes.size - 1 | ||
} | ||
|
||
// 다음 자식을 체크하기 위해 depth 증가 | ||
parent = parent.nodes[index] | ||
} | ||
} | ||
|
||
root.nodes.sortBy{ it.feed } // 자식 노드를 먹이 이름 기준으로 오름차순 정렬 | ||
for(node in root.nodes) { | ||
tree(node, "") // depth 1 | ||
} | ||
|
||
print(answer) | ||
} | ||
|
||
fun tree(current: Node, depth: String) { | ||
answer.append(depth).append(current.feed).append("\n") | ||
|
||
current.nodes.sortBy{ it.feed } // 자식 노드를 먹이 이름 기준으로 오름차순 정렬 | ||
for(node in current.nodes) { | ||
tree(node, depth + DEPTH_STRING) // Depth 증가시켜주고 자식 노드도 탐색 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
// 5차시 2024.07.31.수 : SW Expert Academy - 1251. [S/W 문제해결 응용] 4일차 - 하나로 | ||
package jung0115.트리; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.InputStreamReader; | ||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.StringTokenizer; | ||
import java.lang.Math; | ||
|
||
|
||
public class SWEA_1251 { | ||
static Long[][] island; | ||
static int[] parents; | ||
private static class Edge implements Comparable<Edge> { | ||
int island1, island2; | ||
Long cost; // 비용 = 환경 부담금 (* E는 마지막에) | ||
|
||
Edge(int island1, int island2, Long cost) { | ||
this.island1 = island1; | ||
this.island2 = island2; | ||
this.cost = cost; | ||
} | ||
|
||
// 환경부담금 기준 오름차순 정렬 | ||
@Override | ||
public int compareTo(Edge edge) { | ||
if(edge.cost < cost) return 1; | ||
else if(edge.cost > cost) return -1; | ||
return 0; | ||
} | ||
} | ||
|
||
public static void main(String args[]) throws Exception | ||
{ | ||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
StringBuilder printSet = new StringBuilder(); | ||
|
||
int T = Integer.parseInt(br.readLine()); | ||
|
||
for(int test_case = 1; test_case <= T; test_case++) | ||
{ | ||
int N = Integer.parseInt(br.readLine()); // 섬의 개수 | ||
island = new Long[N][2]; | ||
|
||
// X 좌표 | ||
StringTokenizer st = new StringTokenizer(br.readLine()); | ||
for(int i = 0; i < N; i++) { | ||
island[i][0] = Long.parseLong(st.nextToken()); | ||
} | ||
|
||
// Y 좌표 | ||
st = new StringTokenizer(br.readLine()); | ||
for(int i = 0; i < N; i++) { | ||
island[i][1] = Long.parseLong(st.nextToken()); | ||
} | ||
|
||
Double E = Double.parseDouble(br.readLine()); // 환경 부담 세율 | ||
|
||
// 각 섬을 잇는 해저터널의 환경 부담금 (* E는 마지막에) | ||
ArrayList<Edge> edges = new ArrayList<>(); | ||
for(int i = 0; i < N; i++) { | ||
for(int j = i + 1; j < N; j++) { | ||
Long distanceX = island[i][0] - island[j][0]; | ||
Long distanceY = island[i][1] - island[j][1]; | ||
Long cost = (distanceX * distanceX) + (distanceY * distanceY); | ||
|
||
edges.add(new Edge(i, j, cost)); | ||
} | ||
} | ||
|
||
// 환경부담금 순으로 오름차순 정렬 | ||
Collections.sort(edges); | ||
|
||
// root 노드를 자기 자신으로 초기화 | ||
parents = new int[N]; | ||
for(int i = 0; i < N; i++) { | ||
parents[i] = i; | ||
} | ||
|
||
int connect = 0; // 연결된 섬의 개수 | ||
Long totalCost = 0L; // 총 환경부담금 | ||
for(Edge edge : edges) { | ||
if(isConnect(edge.island1, edge.island2)) continue; | ||
|
||
totalCost += edge.cost; | ||
connect++; | ||
if(connect == N - 1) break; | ||
} | ||
|
||
Long answer = Math.round(E * totalCost); | ||
printSet.append("#").append(test_case).append(" ").append(answer).append("\n"); | ||
} | ||
|
||
br.close(); | ||
System.out.print(printSet); | ||
} | ||
|
||
// 연결되어있는지 체크 | ||
static private boolean isConnect(int island1, int island2) { | ||
int root1 = findRoot(island1); | ||
int root2 = findRoot(island2); | ||
|
||
if(root1 == root2) return true; // root 노드가 같다면, 이미 연결되어 있는 것 | ||
parents[root1] = root2; | ||
return false; | ||
} | ||
|
||
// root 노드 찾기 | ||
static private int findRoot(int node) { | ||
if(node == parents[node]) return node; | ||
|
||
parents[node] = findRoot(parents[node]); | ||
return parents[node]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
## ✏️ 기록 | ||
|
||
| 차시 | 날짜 | 문제유형 | 링크 | 풀이 | | ||
|:----:|:---------:|:----:|:------------------------------------------------------------------------------------:|:-----------------------------------------------------:| | ||
| 1차시 | 2024.7.17 | 스택 | <a href= "https://school.programmers.co.kr/learn/courses/30/lessons/42584">주식 가격</a> | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/121 | | ||
## ✏️ 기록 | ||
|
||
| 차시 | 날짜 | 문제유형 | 링크 | 풀이 | | ||
|:---:|:---------:|:----------:|:------------------------------------------------------------------------------------:|:---------------------------------------------------:| | ||
| 1차시 | 2024.7.17 | 스택 | <a href= "https://school.programmers.co.kr/learn/courses/30/lessons/42584">주식 가격</a> | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/121 | | ||
| 2차시 | 2024.7.20 | 슬라이딩 윈도우 | <a href= "https://www.acmicpc.net/problem/13422">도둑</a> | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/128 | | ||
| 3차시 | 2024.7.24 | 다이나믹 프로그래밍 | <a href= "https://www.acmicpc.net/problem/3687">성냥개비</a> | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/132 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
import java.io.BufferedReader; | ||
import java.io.InputStreamReader; | ||
import java.util.Arrays; | ||
|
||
public class Main { | ||
|
||
public static final int MAX_RANGE = 100; | ||
static long[] dp; | ||
static int[] numbers = {1, 7, 4, 2, 0, 8}; | ||
|
||
public static void main(String[] args) throws Exception { | ||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
|
||
int t = Integer.parseInt(br.readLine()); | ||
|
||
dp = new long[MAX_RANGE + 1]; | ||
Arrays.fill(dp, Long.MAX_VALUE); | ||
|
||
init(); | ||
calculateMinNumber(); | ||
|
||
for (int i = 0; i < t; i++) { | ||
int n = Integer.parseInt(br.readLine()); | ||
|
||
StringBuilder sb = new StringBuilder(); | ||
sb.append(dp[n]).append(" "); | ||
|
||
int count; | ||
|
||
if (n % 2 == 0) { | ||
count = n / 2; | ||
} else{ | ||
sb.append("7"); | ||
count = (n - 3) / 2; | ||
} | ||
|
||
sb.append("1".repeat(count)); | ||
|
||
System.out.println(sb); | ||
} | ||
} | ||
|
||
private static void calculateMinNumber() { | ||
for (int i = 9; i < 101; i++) { | ||
for (int j = 2; j <= 7; j++) { | ||
String number = dp[i - j] + String.valueOf(numbers[j - 2]); | ||
dp[i] = Math.min(Long.parseLong(number), dp[i]); | ||
} | ||
} | ||
} | ||
|
||
private static void init() { | ||
dp[2] = 1; | ||
dp[3] = 7; | ||
dp[4] = 4; | ||
dp[5] = 2; | ||
dp[6] = 6; | ||
dp[7] = 8; | ||
dp[8] = 10; | ||
} | ||
|
||
} |
Oops, something went wrong.