Skip to content

Commit

Permalink
Merge branch 'main' into 5-janghw0126
Browse files Browse the repository at this point in the history
  • Loading branch information
janghw0126 authored Sep 1, 2024
2 parents 6a452a5 + ef09710 commit e49088f
Show file tree
Hide file tree
Showing 10 changed files with 388 additions and 7 deletions.
1 change: 1 addition & 0 deletions LJEDD2/2024-2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
| 1차시 | 2024.07.17 | 이분탐색 | <a href="https://school.programmers.co.kr/learn/courses/30/lessons/43238?language=python3">입국심사</a> | [#1](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/123) |
| 2차시 | 2024.07.20 | 다이나믹프로그래밍 | <a href="https://school.programmers.co.kr/learn/courses/30/lessons/42895">N으로 표현</a> | [#2](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/126) |
| 3차시 | 2024.07.24 | 깊이/너비 우선 탐색(DFS/BFS) | <a href="https://school.programmers.co.kr/learn/courses/30/lessons/43164">여행경로</a> | [#3](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/131) |
| 4차시 | 2024.07.27 | 그래프 | <a href="https://school.programmers.co.kr/learn/courses/30/lessons/49189">가장 먼 노드</a> | [#4](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/133) |
---
23 changes: 23 additions & 0 deletions LJEDD2/2024-2/그래프/가장 먼 노드.py
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) # 최댓값을 가지는 요소의 개수
7 changes: 6 additions & 1 deletion janghw0126/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## ✏️ 기록

### 2024-1
| 차시 | 날짜 | 문제유형 | 링크 | 풀이 |
|:----:|:---------:|:----:|:-----:|:----:|
| 1차시 | 2024.1.1 | 해시 | <a href= "https://school.programmers.co.kr/learn/courses/30/lessons/42576">완주하지 못한 선수</a> |[#4](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/4) |
Expand Down Expand Up @@ -30,7 +31,11 @@
| 26차시 | 2024.3.30 | 브루트 포스 | <a href= "https://www.acmicpc.net/problem/14501">퇴사</a> |[#110](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/110) |
| 27차시 | 2024.4.3 | 브루트 포스 | <a href= "https://www.acmicpc.net/problem/16198">에너지 모으기</a> |[#115](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/115) |
| 28차시 | 2024.4.12 | 정렬 | <a href= "https://www.acmicpc.net/problem/2751">수 정렬하기 2</a> |[#117](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/117) |
||||||
---

### 2024-2
| 차시 | 날짜 | 문제유형 | 링크 | 풀이 |
|:----:|:---------:|:----:|:-----:|:----:|
| 1차시 | 2024.7.17 | 수학 | <a href= "https://www.acmicpc.net/problem/1241">머리 톡톡</a> |[#124](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/124) |
| 2차시 | 2024.7.21 | 그리디 | <a href= "https://www.acmicpc.net/problem/1931">회의실 배정</a> |[#127](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/127) |
| 3차시 | 2024.7.24 || <a href= "https://www.acmicpc.net/problem/5430">AC</a> |[#130](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/130) |
Expand Down
5 changes: 4 additions & 1 deletion jung0115/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@
| 차시 | 날짜 | 문제유형 | 링크 | 풀이 |
|:---:|:---:|:-----:|:---:|:---:|
| 1차시 | 2024.07.17.수 | 다이나믹 프로그래밍 | [동전 바꿔주기(2624)](https://www.acmicpc.net/problem/2624) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/120 |
| 2차시 | 2024.07.20.토 | 백트래킹 | [우주 탐사선(17182)](https://www.acmicpc.net/problem/17182) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/125 |
| 2차시 | 2024.07.20.토 | 백트래킹 | [우주 탐사선(17182)](https://www.acmicpc.net/problem/17182) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/125 |
| 3차시 | 2024.07.24.수 | 이분 탐색 | [휴게소 세우기(1477)](https://www.acmicpc.net/problem/1477) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/129 |
| 4차시 | 2024.07.27.토 | 트리 / 트라이 | [개미굴(14725)](https://www.acmicpc.net/problem/14725) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/134 |
| 5차시 | 2024.07.31.수 | 트리 / MST | [1251. [S/W 문제해결 응용] 4일차 - 하나로](https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15StKqAQkCFAYD) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/137 |
46 changes: 46 additions & 0 deletions jung0115/이분 탐색/Baekjoon_1477.kt
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)
}
64 changes: 64 additions & 0 deletions jung0115/트리/Baekjoon_14725.kt
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 증가시켜주고 자식 노드도 탐색
}
}
116 changes: 116 additions & 0 deletions jung0115/트리/SWEA_1251.java
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];
}
}
11 changes: 6 additions & 5 deletions wonjunYou/README.md
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 |
62 changes: 62 additions & 0 deletions wonjunYou/다이나믹 프로그래밍/BOJ_성냥개비.java
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;
}

}
Loading

0 comments on commit e49088f

Please sign in to comment.