From 4a34e8e690d18ef0ca03e281f8f0a8714b96e29d Mon Sep 17 00:00:00 2001 From: jjuchan Date: Mon, 7 Jul 2025 22:18:41 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2042586=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20=EB=AC=B8=EC=A0=9C=20=ED=92=80=EC=9D=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.name | 2 +- src/week02/Juchan/PG_42586.java | 77 +++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/week02/Juchan/PG_42586.java diff --git a/.idea/.name b/.idea/.name index ae84d7c..42061c0 100644 --- a/.idea/.name +++ b/.idea/.name @@ -1 +1 @@ -PG_340211.java \ No newline at end of file +README.md \ No newline at end of file diff --git a/src/week02/Juchan/PG_42586.java b/src/week02/Juchan/PG_42586.java new file mode 100644 index 0000000..ded4e9d --- /dev/null +++ b/src/week02/Juchan/PG_42586.java @@ -0,0 +1,77 @@ +package week02.Juchan; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +public class PG_42586 { + static class Solution { + public int[] solution(int[] progresses, int[] speeds) { + // 각 작업이 완료되기까지 남은 '일 수'를 저장할 큐 + Queue queue = new LinkedList<>(); + + //(100-진도율)/개발 속도를 통해 남은 일 수 계산 + for (int i = 0; i < progresses.length; i++) { + int day = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]); //ex 3.8888 일이면 4일 필요하기에 ceil 함수를 사용해서 올림 처리 후 형 변환 + queue.offer(day); + } + List result = new ArrayList<>(); + + // 첫번 째 배포 일 수를 뽑아냅니다. + while (!queue.isEmpty()) { + int current = queue.poll(); + int count = 1; + + // 배포일과 비교하여 큐의 첫 번째 일 수가 작거나 같으면 같이 묶어서 리스트에 저장합니다. + while (!queue.isEmpty() && queue.peek() <= current) { + queue.poll(); + count++; + } + result.add(count); + } + int[] answer = new int[result.size()]; + for (int i = 0; i < result.size(); i++) { + answer[i] = result.get(i); + } + return answer; + } + } + + public static void main(String[] args) { //테스트 + Solution solution = new Solution(); + + + int[] progresses = {93, 30, 55}; + int[] speeds = {1, 30, 5}; + + int[] result = solution.solution(progresses, speeds); + + + System.out.print("["); + for (int i = 0; i < result.length; i++) { + System.out.print(result[i]); + if (i != result.length - 1) { //마지막 요소는 , 를 빼줍니다. + System.out.print(", "); + } + } + System.out.println("]"); + // 예상 출력: [2, 1] + } +} + + +/** + * 문제 + * 각각 기능은 진도(progress) 가 있고, 매일 각 기능마다 개발 속도(speed) 만큼 진도가 올라간다. + * 기능은 진도가 100% 이상이 되어야 배포 할 수 있다. + * 배포는 하루에 한 번, 하루가 끝난 후 진행한다. + * 진도가 뒤에 있는 기능이 앞 기능보다 빨리 끝날 수 있는데 뒤에 있는 기능은 앞 기능이 배포되는 시점에 같이 배포된다. + *

+ * 풀이 방법 + * 1. 각 기능마다 100%가 될 때까지 걸리는 날을 계산한다.(100-진도율)/개발 속도 + * 2. 큐에서 가장 앞에 있는 기능을 꺼내 배포일을 지정한다. + * 3. 배포일보다 작업이 먼저 끝난 뒤에 있는 기능도 같이 묶어준다. + * 4. 묶인 기능의 수를 리스트에 넣어준다. + * 5. 리스트를 출력한다. + */ \ No newline at end of file From 9b7270e5daa6c63ae1be9ff219356223ef52d03b Mon Sep 17 00:00:00 2001 From: jjuchan Date: Mon, 14 Jul 2025 16:35:46 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=203=EC=A3=BC=EC=B0=A8=20-=20=C3=A3=20?= =?UTF-8?q?PG=5F43105=20=EC=A0=95=EC=88=98=20=EC=82=BC=EA=B0=81=ED=98=95?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=ED=92=80=EC=9D=B4[=EC=9C=A4=EC=A3=BC?= =?UTF-8?q?=EC=B0=AC]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/week03/Juchan/PG_43105.java | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/week03/Juchan/PG_43105.java diff --git a/src/week03/Juchan/PG_43105.java b/src/week03/Juchan/PG_43105.java new file mode 100644 index 0000000..73f3d78 --- /dev/null +++ b/src/week03/Juchan/PG_43105.java @@ -0,0 +1,57 @@ +package week03.Juchan; + +class Solution { + public int solution(int[][] triangle) { + int n = triangle.length; + int[][] dp = new int[n][n]; // 합을 넣어둘 배열 생성 + + dp[0][0] = triangle[0][0]; // 초기값은 꼭대기의 값 + + for (int i = 1; i < n; i++) { + //맨 왼쪽 + dp[i][0] = dp[i - 1][0] + triangle[i][0]; + for (int j = 1; j < i; j++) { + dp[i][j] = Math.max(dp[i - 1][j - 1], dp[i - 1][j]) + triangle[i][j]; // 중간에 있는 값은 전 인덱스의 왼쪽 값과 오른쪽 값중 큰 값으로 설정 + } + + // 맨 오른쪽 + dp[i][i] = dp[i - 1][i - 1] + triangle[i][i]; + } + int answer = 0; + for (int i = 0; i < n; i++) { + answer = Math.max(answer, dp[n - 1][i]); // 최댓값을 갱신 + } + return answer; + } +} + +public class PG_43105 { + public static void main(String[] args) { + Solution s = new Solution(); + int[][] triangle = { + {7}, + {3, 8}, + {8, 1, 0}, + {2, 7, 4, 4}, + {4, 5, 2, 6, 5} + }; + int result = s.solution(triangle); + System.out.println(result); // 예상 출력: 30 + } +} + + +/** + * 문제 + * 숫자가 들어간 피라미드 형태의 삼각형이 주어진다. + * 꼭대기부터 바닥까지 인접한 숫자를 따라 내려가면서 만들 수 있는 최대 합을 구하라. + *

+ * 풀이 요약 + * - 각 위치까지의 최대 합을 저장할 dp 배열을 선언한다. + * - 첫 번째 행(dp[0][0])은 초기값으로 triangle[0][0]을 넣는다. + * - 그다음 행부터는 규칙적으로 채운다: + * 1. 맨 왼쪽 값(dp[i][0])은 바로 위 행의 같은 인덱스(dp[i-1][0])에서만 내려올 수 있다. + * 2. 맨 오른쪽 값(dp[i][i])은 바로 위 행의 오른쪽 대각선 왼쪽(dp[i-1][i-1])에서만 내려올 수 있다. + * 3. 그 외 중간 값(dp[i][j])은 바로 위(dp[i-1][j]) 또는 왼쪽 대각선(dp[i-1][j-1]) 중 큰 값에 현재 triangle[i][j]를 더한다. + * - 마지막 행(dp[n-1])에서 최댓값을 찾아서 반환한다. + */ \ No newline at end of file