From 26225c6a9b62a050a3310ae2709bdc3adf7a78cd Mon Sep 17 00:00:00 2001 From: sukangpunch Date: Fri, 6 Feb 2026 16:27:42 +0900 Subject: [PATCH 01/15] =?UTF-8?q?[Week05]=20BOJ=201781:=20=EC=BB=B5?= =?UTF-8?q?=EB=9D=BC=EB=A9=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sukangpunch.java" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/sukangpunch.java" diff --git "a/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/sukangpunch.java" "b/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/sukangpunch.java" new file mode 100644 index 0000000..9d7599d --- /dev/null +++ "b/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/sukangpunch.java" @@ -0,0 +1,70 @@ +package study.week05; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.PriorityQueue; + +// 컵라면 +public class BOJ_1781 { + + static class Problem implements Comparable { + + int deadLine; + int cup; + + public Problem(int deadLine, int cup) { + this.deadLine = deadLine; + this.cup = cup; + } + + @Override + public int compareTo(Problem o) { + if (this.deadLine == o.deadLine) { + return o.cup - this.cup; + } + return this.deadLine - o.deadLine; + } + } + + static PriorityQueue pq; + static int N; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + N = Integer.parseInt(br.readLine()); + pq = new PriorityQueue<>(); + + for (int i = 0; i < N; i++) { + String[] s = br.readLine().split(" "); + int deadLine = Integer.parseInt(s[0]); + int cup = Integer.parseInt(s[1]); + pq.add(new Problem(deadLine, cup)); + } + + PriorityQueue select = new PriorityQueue<>(); + + while(!pq.isEmpty()){ + Problem problem = pq.poll(); + int deadLine = problem.deadLine; + int cup = problem.cup; + + if(select.size() < deadLine){ + select.offer(cup); + }else{ + if(!select.isEmpty() && select.peek() < cup){ // 만약 선택한 문제 중 가장 적은 컵라면보다 현재 추가하려는 problem 의 컵라면 개수가 더 많다면 + select.poll(); + select.offer(cup); + } + } + } + + long result = 0; + for(int cup : select){ + result += cup; + } + + System.out.println(result); + } +} From 85fce181d89477f9d7b1454ab922b61afe01df1c Mon Sep 17 00:00:00 2001 From: JAEHEE25 Date: Wed, 11 Feb 2026 10:30:53 +0900 Subject: [PATCH 02/15] =?UTF-8?q?[Week05]=20BOJ=206236:=20=EC=9A=A9?= =?UTF-8?q?=EB=8F=88=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\227\264_\354\225\225\354\266\225.java" | 46 +++++++++++++++++ .../JAEHEE25.java" | 51 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 "personal/JAEHEE25/PGS/\353\254\270\354\236\220\354\227\264_\354\225\225\354\266\225.java" create mode 100644 "weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/JAEHEE25.java" diff --git "a/personal/JAEHEE25/PGS/\353\254\270\354\236\220\354\227\264_\354\225\225\354\266\225.java" "b/personal/JAEHEE25/PGS/\353\254\270\354\236\220\354\227\264_\354\225\225\354\266\225.java" new file mode 100644 index 0000000..964d6fe --- /dev/null +++ "b/personal/JAEHEE25/PGS/\353\254\270\354\236\220\354\227\264_\354\225\225\354\266\225.java" @@ -0,0 +1,46 @@ +import java.util.*; + +class Solution { + public int solution(String s) { + int answer = Integer.MAX_VALUE; + int len = 1; //단위 + int N = s.length(); + + while (len <= N) { + StringBuilder resultBuilder = new StringBuilder(); + StringBuilder wordBuilder = new StringBuilder(); + String prev = ""; + String word = ""; + int cnt = 0; + for (int i = 0; i <= N; i++) { + word = wordBuilder.toString(); + if (word.length() == len) { + if (prev.equals("")) { //맨 처음일 경우 prev에 저장 + prev = word; + cnt++; + } else if (prev.equals(word)) { //연속된 단어일 경우 개수 카운트 + cnt++; + } else { //새로운 단어일 경우 이전 단어 기록 + if (cnt <= 1) resultBuilder.append(prev); + else resultBuilder.append(cnt + prev); + prev = word; + cnt = 1; + } + wordBuilder = new StringBuilder(); //초기화 + } + if (i < N) wordBuilder.append(s.charAt(i)); + } + + //마지막 처리 + if (cnt <= 1) resultBuilder.append(prev); + else resultBuilder.append(cnt + prev); + resultBuilder.append(wordBuilder.toString()); //남은 글자들 + + //정답 구하기 + answer = Math.min(resultBuilder.length(), answer); + len++; + } + + return answer; + } +} diff --git "a/weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/JAEHEE25.java" "b/weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/JAEHEE25.java" new file mode 100644 index 0000000..7e956fd --- /dev/null +++ "b/weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/JAEHEE25.java" @@ -0,0 +1,51 @@ +package week05.BOJ_6236_용돈관리; + +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ6236 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + int[] money = new int[N]; + int max = 0; + for (int i = 0; i < N; i++) { + money[i] = Integer.parseInt(br.readLine()); + max = Math.max(money[i], max); //최대 금액을 최솟값으로 설정 + } + + int answer = 0; + int left = max; + int right = 10000 * 100000; + while (left <= right) { + int K = (left + right) / 2; + + //결과 계산 + int result = getWithdrawCnt(money, K, M); + + if (M >= result) { + answer = K; + right = K - 1; + } else { + left = K + 1; + } + } + System.out.println(answer); + } + + static int getWithdrawCnt(int[] money, int K, int M) { + int withdrawCnt = 1; + int now = K; + for (int i = 0; i < money.length; i++) { + if (money[i] > now) { //모자라면 K원 인출 + withdrawCnt++; + now = K; + } + now -= money[i]; + } + return withdrawCnt; + } +} From a9b6480170767053db5c20719e4021bc47a3f735 Mon Sep 17 00:00:00 2001 From: seonghyeok cho <65901319+whqtker@users.noreply.github.com> Date: Wed, 11 Feb 2026 14:40:17 +0900 Subject: [PATCH 03/15] =?UTF-8?q?[Week05]=20BOJ=206236:=20=EC=9A=A9?= =?UTF-8?q?=EB=8F=88=20=EA=B4=80=EB=A6=AC=20(#43)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Week04] BOJ 1946: 신입 사원 * [Week04] BOJ 14925: 목장 건설하기 * [Week05] BOJ 6236: 용돈 관리 * [Week05] BOJ 14002: 가장 긴 증가하는 부분 수열 4 * [Week05] BOJ 1781: 컵라면 * [Week06] BOJ 2580: 스도쿠 --- .../whqtker.java" | 80 ++++++++++++ .../whqtker.cpp" | 44 +++++++ .../whqtker.cpp" | 63 ++++++++++ .../whqtker.java" | 119 ++++++++++++++++++ .../whqtker.cpp" | 57 --------- 5 files changed, 306 insertions(+), 57 deletions(-) create mode 100644 "weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/whqtker.java" create mode 100644 "weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/whqtker.cpp" create mode 100644 "weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/whqtker.cpp" create mode 100644 "weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/whqtker.java" delete mode 100644 "weekly/week3/BOJ_1477_\355\234\264\352\262\214\354\206\214 \354\204\270\354\232\260\352\270\260/whqtker.cpp" diff --git "a/weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/whqtker.java" "b/weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/whqtker.java" new file mode 100644 index 0000000..80417cb --- /dev/null +++ "b/weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/whqtker.java" @@ -0,0 +1,80 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayDeque; +import java.util.Arrays; +import java.util.Queue; +import java.util.Stack; +import java.util.StringTokenizer; + +public class Main { + + public static void main(String[] args) throws IOException { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + + int n = Integer.parseInt(br.readLine()); + + int[] arr = new int[n]; + int[] dp = new int[n]; + int[] rev = new int[n]; // 역추적 배열 + + for (int i = 0; i < n; i++) { + rev[i] = -1; + } + + String line = br.readLine(); + StringTokenizer st = new StringTokenizer(line); + for (int i = 0; i < n; i++) { + arr[i] = Integer.parseInt(st.nextToken()); + } + + dp[0] = 1; + int maxVal = 0; + int maxIdx = 0; + for (int i = 0; i < n; i++) { + int prevVal = 0; + int prevIdx = 0; + for (int j = 0; j < i; j++) { + if (arr[i] > arr[j]) { + if (prevVal < dp[j]) { + prevVal = dp[j]; + prevIdx = j; + } + } + } + + dp[i] = prevVal + 1; + if (prevVal == 0) { + rev[i] = -1; + } + else { + rev[i] = prevIdx; + } + + // 최댓값 갱신 + if (maxVal < dp[i]) { + maxVal = dp[i]; + maxIdx = i; + } + } + + sb.append(maxVal).append("\n"); + + int idx = maxIdx; + int[] ans = new int[maxVal]; + int ansIdx = 0; + while (idx != -1) { + ans[ansIdx] = arr[idx]; + idx = rev[idx]; + ansIdx++; + } + + for (int i = maxVal - 1; i >= 0; i--) { + sb.append(ans[i]).append(' '); + } + + System.out.print(sb); + } +} diff --git "a/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/whqtker.cpp" "b/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/whqtker.cpp" new file mode 100644 index 0000000..57f8dac --- /dev/null +++ "b/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/whqtker.cpp" @@ -0,0 +1,44 @@ +#include +#include +#include +#include + +using namespace std; + +int main() { + int n; + cin >> n; + + vector> v; + for (int i = 0; i < n; i++) { + int a, b; + cin >> a >> b; + v.push_back({ a,b }); + } + + // 데드라인 순으로 정렬 + sort(v.begin(), v.end()); + + // 처리 가능한 과제 저장 + priority_queue,greater> pq; + + for (int i = 0; i < n; i++) { + int deadline = v[i].first; + int cnt = v[i].second; + pq.push(cnt); + + // 데드라인을 초과하는 경우 가장 개수가 작은 것을 버린다. + // v[i]를 처리하기 위해서는 pq의 크기가 deadline보다 작거나 같아야 한다. + if (pq.size() > deadline) { + pq.pop(); + } + } + + long long ans = 0; + while (!pq.empty()) { + ans += pq.top(); + pq.pop(); + } + + cout << ans; +} \ No newline at end of file diff --git "a/weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/whqtker.cpp" "b/weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/whqtker.cpp" new file mode 100644 index 0000000..55de798 --- /dev/null +++ "b/weekly/week05/BOJ_6236_\354\232\251\353\217\210\352\264\200\353\246\254/whqtker.cpp" @@ -0,0 +1,63 @@ +#include +#include + +using namespace std; + +int n, m; +int arr[100000]; + +// x원 인출하는 경우 m번 이하로 가능한가 ? +bool able(int x) { + int target = x; + int cnt = 1; // 인출 횟수, 처음 한 번 인출함 + + for (int i = 0; i < n; i++) { + target -= arr[i]; + + // 인출 안해도 되는 상황 + if (target >= 0) { + continue; + } + else { + cnt++; + target = x - arr[i]; + + // 만약 인출했으나 현재 사용 불가능한 경우 + if (target < 0) { + return false; + } + } + } + + return cnt <= m; +} + +int main() { + cin.tie(0); + ios::sync_with_stdio(0); + + cin >> n >> m; + + int left = 0; + int right = 0; + for (int i = 0; i < n; i++) { + cin >> arr[i]; + right += arr[i]; + } + + int ans = 2e9; + while (left <= right) { + int mid = (left + right) / 2; + + // mid원으로 m번 이하로 인출 가능하다면 더 작은 금액 시도 + if (able(mid)) { + ans = min(ans, mid); + right = mid - 1; + } + else { + left = mid + 1; + } + } + + cout << ans; +} \ No newline at end of file diff --git "a/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/whqtker.java" "b/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/whqtker.java" new file mode 100644 index 0000000..ea66874 --- /dev/null +++ "b/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/whqtker.java" @@ -0,0 +1,119 @@ +package ps_baekjoon; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayDeque; +import java.util.Arrays; +import java.util.Queue; +import java.util.Stack; +import java.util.StringTokenizer; +import java.util.Vector; + +public class Main { + + static StringBuilder sb = new StringBuilder(); + + static Vector zeros = new Vector<>(); + static int[][] arr; + + static class Coor { + int x; + int y; + + Coor(int x, int y) { + this.x = x; + this.y = y; + } + } + + static void printArr() { + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + sb.append(arr[i][j]).append(' '); + } + sb.append("\n"); + } + + System.out.println(sb); + } + + static boolean col(int num, int x, int y) { + for (int i = 0; i < 9; i++) { + if (arr[x][i] == num) { + return false; + } + } + + return true; + } + + static boolean row(int num, int x, int y) { + for (int i = 0; i < 9; i++) { + if (arr[i][y] == num) { + return false; + } + } + + return true; + } + + static boolean square(int num, int x, int y) { + int sx = (x / 3) * 3; + int sy = (y / 3) * 3; + + for (int i = sx; i < sx + 3; i++) { + for (int j = sy; j < sy + 3; j++) { + if (arr[i][j] == num) { + return false; + } + } + } + + return true; + } + + static boolean ok(int num, int x, int y) { + return col(num, x, y) && row(num, x, y) && square(num, x, y); + } + + static void dfs(int cnt) { + if (cnt == zeros.size()) { + printArr(); + System.exit(0); + } + + Coor cur = zeros.get(cnt); + + for (int i = 1; i <= 9; i++) { + if (ok(i, cur.x, cur.y)) { + arr[cur.x][cur.y] = i; + + dfs(cnt + 1); + + arr[cur.x][cur.y] = 0; + } + } + } + + public static void main(String[] args) throws IOException { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + arr = new int[9][9]; + + for (int i = 0; i < 9; i++) { + String line = br.readLine(); + StringTokenizer st = new StringTokenizer(line); + for (int j = 0; j < 9; j++) { + arr[i][j] = Integer.parseInt(st.nextToken()); + + if (arr[i][j] == 0) { + zeros.add(new Coor(i, j)); + } + } + } + + dfs(0); + } +} diff --git "a/weekly/week3/BOJ_1477_\355\234\264\352\262\214\354\206\214 \354\204\270\354\232\260\352\270\260/whqtker.cpp" "b/weekly/week3/BOJ_1477_\355\234\264\352\262\214\354\206\214 \354\204\270\354\232\260\352\270\260/whqtker.cpp" deleted file mode 100644 index 9c7c299..0000000 --- "a/weekly/week3/BOJ_1477_\355\234\264\352\262\214\354\206\214 \354\204\270\354\232\260\352\270\260/whqtker.cpp" +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include - -using namespace std; - -vector v; - -// 휴게소 간 최대 거리를 x로 했을 때, 설치 가능한 휴게소의 수를 리턴 -int chk(int x) { - int cnt = 0; - for (int i = 0; i < v.size() - 1; i++) { - int gap = v[i + 1] - v[i]; - - if (gap % x == 0) { - cnt += gap / x - 1; - } - else { - cnt += gap / x; - } - } - - return cnt; -} - -int main() { - int n, m, l; - cin >> n >> m >> l; - - for (int i = 0; i < n; i++) { - int x; - cin >> x; - v.push_back(x); - } - v.push_back(0); - v.push_back(l); - - sort(v.begin(), v.end()); - - int left = 1; - int right = l; - int mid; - while (left <= right) { - mid = (left + right) / 2; // mid: 휴게소 간 최대 거리 - - int cnt = chk(mid); - - if (cnt <= m) { - right = mid - 1; - } - else { - left = mid + 1; - } - } - - cout << left; -} \ No newline at end of file From 3b76b898e00f45a90e2e2ba8b86dc94c3fb041c6 Mon Sep 17 00:00:00 2001 From: sukangpunch Date: Thu, 12 Feb 2026 16:48:29 +0900 Subject: [PATCH 04/15] =?UTF-8?q?[Week06]=20PGS=20181188:=20=EC=9A=94?= =?UTF-8?q?=EA=B2=A9=20=EC=8B=9C=EC=8A=A4=ED=85=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sukangpunch.java" | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 "weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/sukangpunch.java" diff --git "a/weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/sukangpunch.java" "b/weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/sukangpunch.java" new file mode 100644 index 0000000..1c5c4c7 --- /dev/null +++ "b/weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/sukangpunch.java" @@ -0,0 +1,72 @@ +package study.week06; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +// 요격 시스템 +// 그리디, 구간 스케쥴링 +// 시간복잡도 : O(NlogN) +/** + * 답지 봄 + * 그리디 라는건 알았으나, 정렬 기준과 로직을 떠올리지 못했다. + * 가장 일찍 끝나는 지점에 요격하면 그 지점을 지나는 다른 구간들도 동시에 커버 가능하다. + * end가 늦은 구간으로 요격하면, 일찍 끝나는 구간들은 이미 통과해버려 별도 요격이 필요해지기 때문. + * end 를 기준으로 정렬하고 pre 값보다 start 값이 크다면 answer 증가, pre = now.end 로 업데이트 + * start >= pre 일 때, 새로 요격하는 이유는, 개구간 이기 때문에 end == start 라면 요격이 불가능해진다. + * 즉, end 기준 정렬은 가장 빨리 사라질 구간부터 처리 하는 전략 + */ +public class PGS_181188 { + + public static void main(String[] args) { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int [][]target = new int[][]{ + {4,5}, + {4,8}, + {10,14}, + {11,13}, + {5,12}, + {3,7}, + {1,4} + }; + + int result = solution(target); + System.out.println(result); + } + + static class Missile implements Comparable{ + int start; + int end; + + public Missile(int start, int end){ + this.start = start; + this.end = end; + } + + @Override + public int compareTo(Missile o) { + return this.end - o.end; + } + } + + static int solution(int[][] targets) { + int answer = 0; + List missiles = new ArrayList<>(); + for(int i=0; i Date: Thu, 12 Feb 2026 21:16:05 +0900 Subject: [PATCH 05/15] =?UTF-8?q?[Week05]=20PGS:=20=EC=9A=94=EA=B2=A9=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JAEHEE25.java" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/JAEHEE25.java" diff --git "a/weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/JAEHEE25.java" "b/weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/JAEHEE25.java" new file mode 100644 index 0000000..fed70ca --- /dev/null +++ "b/weekly/week06/PGS_\354\232\224\352\262\251\354\213\234\354\212\244\355\205\234/JAEHEE25.java" @@ -0,0 +1,24 @@ +package week06.PGS_요격시스템; + +import java.util.*; +class Solution { + public int solution(int[][] targets) { + int answer = 0; + Arrays.sort(targets, (o1, o2) -> o1[0] - o2[0]); + + int start = -1; //현재 요격 미사일의 범위 + int end = 100_000_001; + for (int i = 0; i < targets.length; i++) { + if (targets[i][0] >= end) { + answer++; + start = -1; + end = 100_000_001; + } + start = Math.max(start, targets[i][0]); + end = Math.min(end, targets[i][1]); + } + + answer++; + return answer; + } +} From c8e3cac03ecc8a8f0a07cdd62dee0d58f7532d53 Mon Sep 17 00:00:00 2001 From: sukangpunch Date: Fri, 13 Feb 2026 16:25:22 +0900 Subject: [PATCH 06/15] =?UTF-8?q?[Week06]=20BOJ=2017070:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=ED=94=84=20=EC=98=AE=EA=B8=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sukangpunch.java" | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 "weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/sukangpunch.java" diff --git "a/weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/sukangpunch.java" "b/weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/sukangpunch.java" new file mode 100644 index 0000000..aaf0fe7 --- /dev/null +++ "b/weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/sukangpunch.java" @@ -0,0 +1,92 @@ +package study.week06; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +// 파이프 옮기기 +// dp +/** + * 방금 전에 해당 문제와 거의 동일한 17484 문제를 풀었어서 바로 풀 수 있었다. + * 3차원 dp 배열을 두고 0-가로, 1-세로, 2-대각선 인 경우의 수들을 관리하였다. + * 가로부터 시작하므로, 시작점 가로 상황에서 가능한 경우의 수로 dp 값을 초기화 + * 모든 좌표를 확인하되, 반복문 안에서, 가로, 세로, 대각선인 상황 모두를 고려하는 반복문 하나를 더 활용 + * 가로 일때는 오른쪽, 대각선 이동이 가능하므로, 바뀌는 상태에 따라서 값을 더해준다. + * 위처럼 각 파이프 상태별로 가능한 연산을 해주면 마지막에 상태별로 가능한 경우의 수들이 남고, 이를 더해주면 된다. + */ +public class BOJ_17070 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + + int [][] map = new int[N][N]; + int [][][] dp = new int[N][N][3]; + + for(int i=0; i Date: Fri, 13 Feb 2026 18:46:56 +0900 Subject: [PATCH 07/15] =?UTF-8?q?[Week05]=20BOJ=2014002:=20=EA=B0=80?= =?UTF-8?q?=EC=9E=A5=20=EA=B8=B4=20=EC=A6=9D=EA=B0=80=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=88=98=EC=97=B4=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JAEHEE25.java" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/JAEHEE25.java" diff --git "a/weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/JAEHEE25.java" "b/weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/JAEHEE25.java" new file mode 100644 index 0000000..9181d79 --- /dev/null +++ "b/weekly/week05/BOJ_14002_\352\260\200\354\236\245\352\270\264\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\2644/JAEHEE25.java" @@ -0,0 +1,50 @@ +package week05.BOJ_14002_가장긴증가하는부분수열4; + +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ14002 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + StringTokenizer st = new StringTokenizer(br.readLine()); + int[] arr = new int[N]; + for (int i = 0; i < N; i++) { + arr[i] = Integer.parseInt(st.nextToken()); + } + + int[] dp = new int[N]; + for (int i = 0; i < N; i++) { + dp[i] = 1; + for (int j = 0; j < i; j++) { + if (arr[j] < arr[i]) { + dp[i] = Math.max(dp[i], dp[j] + 1); + } + } + } + + StringBuilder answer = new StringBuilder(); + int max = 0; + for (int i = 0; i < N; i++) { + if (dp[i] > max) { + max = dp[i]; + } + } + answer.append(max).append("\n"); + + Stack stack = new Stack<>(); + for (int i = N - 1; i >= 0; i--) { + if (dp[i] == max) { + stack.push(arr[i]); + max--; + } + } + + while (!stack.isEmpty()) { + answer.append(stack.pop()).append(" "); + } + + System.out.println(answer); + } +} From dfd13366937fa1cb31d95c63ebd688145e747a9d Mon Sep 17 00:00:00 2001 From: sukangpunch Date: Sat, 14 Feb 2026 21:30:30 +0900 Subject: [PATCH 08/15] =?UTF-8?q?[Week06]=20BOJ=202580:=20=EC=8A=A4?= =?UTF-8?q?=EB=8F=84=EC=BF=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sukangpunch.java" | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 "weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/sukangpunch.java" diff --git "a/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/sukangpunch.java" "b/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/sukangpunch.java" new file mode 100644 index 0000000..9e60066 --- /dev/null +++ "b/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/sukangpunch.java" @@ -0,0 +1,97 @@ +package it_company_work_book.silver; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +// 스도쿠 +// 구현, 백트래킹 +/** + * 답 확인 + * 백트래킹 문제임은 알았는데, 구현 못했음 + * 인덱스 0, 0 ~ 8,8 까지 재귀로 구현한다. + * 세로, 가로, 3x3 을 확인하고 가능하면 다음스텝, 불가능하면 빽 + * 8,8 까지 순회 했다면, 알맞게 채운 것이므로 종료 + */ +public class BOJ_2580 { + + static int [][] map; + static int size; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + map = new int[9][9]; + + for(int i=0; i<9; i++){ + String []s = br.readLine().split(" "); + for(int j=0; j<9; j++){ + int num = Integer.parseInt(s[j]); + map[i][j] = num; + } + } + + backtrack(0,0); + } + + private static void backtrack(int y, int x) { + if(x == 9){ + backtrack(y+1, 0); + return; + } + + if(y == 9){ + StringBuilder sb = new StringBuilder(); + for(int i=0; i<9; i++){ + for(int j=0; j<9; j++){ + sb.append(map[i][j]).append(" "); + } + sb.append("\n"); + } + System.out.println(sb); + System.exit(0); + } + + if(map[y][x] == 0){ + for(int i=1; i<=9; i++){ + if(check(y, x, i)){ + map[y][x] = i; + backtrack(y, x+1); + } + } + map[y][x] = 0; + return; + } + + backtrack(y, x+1); + } + + private static boolean check(int y, int x, int value) { + + for(int i=0; i<9; i++){ + if(map[y][i] == value){ + return false; + } + } + + for(int i=0; i<9; i++){ + if(map[i][x] == value){ + return false; + } + } + + // 같은 네모를 보기 위함 + int tmpY = (y/3) * 3; + int tmpX = (x/3) * 3; + + for(int i = tmpY; i Date: Sat, 21 Feb 2026 00:12:16 +0900 Subject: [PATCH 09/15] =?UTF-8?q?[Week05]=20BOJ=201781:=20=EC=BB=B5?= =?UTF-8?q?=EB=9D=BC=EB=A9=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JAEHEE25.java" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/JAEHEE25.java" diff --git "a/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/JAEHEE25.java" "b/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/JAEHEE25.java" new file mode 100644 index 0000000..bbbe95c --- /dev/null +++ "b/weekly/week05/BOJ_1781_\354\273\265\353\235\274\353\251\264/JAEHEE25.java" @@ -0,0 +1,43 @@ +package week05.BOJ_1781_컵라면; +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ1781 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + int[][] works = new int[N][2]; //데드라인, 컵라면 수 + for (int i = 0; i < N; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + works[i][0] = Integer.parseInt(st.nextToken()); + works[i][1] = Integer.parseInt(st.nextToken()); + } + + Arrays.sort(works, (o1, o2) -> { + if (o1[0] == o2[0]) return o2[1] - o1[1]; + return o1[0] - o2[0]; + }); + + PriorityQueue pq = new PriorityQueue<>(); //푼 문제의 컵라면 수 저장 + for (int i = 0; i < N; i++) { + + //pq 사이즈 == 푼 문제 수 == 사용한 시간과 데드라인 시간 비교 + if (pq.size() < works[i][0]) { + pq.offer(works[i][1]); + } else { + if (pq.peek() < works[i][1]) { //기존에 풀었던 문제의 컵라면 수보다 크면 교체 + pq.poll(); + pq.offer(works[i][1]); + } + } + } + + //출력 + int answer = 0; + while (!pq.isEmpty()) { + answer += pq.poll(); + } + System.out.println(answer); + } +} From c09e3f7731799168cd345e36be83a624ae931d57 Mon Sep 17 00:00:00 2001 From: JAEHEE25 Date: Tue, 24 Feb 2026 16:30:36 +0900 Subject: [PATCH 10/15] =?UTF-8?q?[Week06]=20BOJ=202580:=20=EC=8A=A4?= =?UTF-8?q?=EB=8F=84=EC=BF=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JAEHEE25.java" | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 "weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/JAEHEE25.java" diff --git "a/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/JAEHEE25.java" "b/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/JAEHEE25.java" new file mode 100644 index 0000000..8b0b56e --- /dev/null +++ "b/weekly/week06/BOJ_2580_\354\212\244\353\217\204\354\277\240/JAEHEE25.java" @@ -0,0 +1,80 @@ +package week06.BOJ_2580_스도쿠; +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ2580 { + static int N = 9; + static int[][] board; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + board = new int[N][N]; + for (int i = 0; i < N; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + sudoku(0, 0); + } + + static void sudoku(int x, int y) { + if (y == N) { //하나의 행 모두 확인 + sudoku(x + 1, 0); //다음 행으로 이동 + return; + } + + if (x == N) { //모든 칸 확인 -> 출력 + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < N; i++){ + for(int j = 0; j < N; j++){ + sb.append(board[i][j]).append(' '); + } + sb.append("\n"); + } + System.out.println(sb); + System.exit(0); //하나만 출력해야하기 때문에 시스템 종료 + } + + if (board[x][y] == 0) { //빈칸일 경우 + for (int num = 1; num <= N; num++) { //1~9 중 가능한 수 찾기 + if (checkPossible(x, y, num)) { + board[x][y] = num; //가능한 수 빈칸에 넣기 + sudoku(x, y + 1); //다음 칸 확인 + board[x][y] = 0; //다시 빈 칸으로 처리 + } + } + } else { //빈칸이 아닐 경우 다음 칸 확인 + sudoku(x, y + 1); + } + } + + static boolean checkPossible(int x, int y, int value) { //value가 있는지 검사 + //행 검사 + for (int i = 0; i < N; i++) { + if (board[x][i] == value) { + return false; + } + } + + //열 검사 + for (int i = 0; i < N; i++) { + if (board[i][y] == value) { + return false; + } + } + + //정사각형 검사 + int sx = (x / 3) * 3; + int sy = (y / 3) * 3; + for (int i = sx; i < sx + 3; i++) { + for (int j = sy; j < sy + 3; j++) { + if (board[i][j] == value) { + return false; + } + } + } + return true; + } + +} From 41e4a36c3a77d5984593e36b355ecf2ee74ac1ef Mon Sep 17 00:00:00 2001 From: JAEHEE25 Date: Tue, 24 Feb 2026 16:30:47 +0900 Subject: [PATCH 11/15] =?UTF-8?q?[Week06]=20BOJ=2017070:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=ED=94=84=EC=98=AE=EA=B8=B0=EA=B8=B01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JAEHEE25.java" | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/JAEHEE25.java" diff --git "a/weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/JAEHEE25.java" "b/weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/JAEHEE25.java" new file mode 100644 index 0000000..e181834 --- /dev/null +++ "b/weekly/week06/BOJ_17070_\355\214\214\354\235\264\355\224\204\354\230\256\352\270\260\352\270\2601/JAEHEE25.java" @@ -0,0 +1,63 @@ +package week06.BOJ_17070_파이프옮기기1; + +import java.util.*; +import java.lang.*; +import java.io.*; + +class BOJ17070 { + static final int WALL = 1; + static int answer = 0; + static int N; + static int[][] house; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + house = new int[N][N]; + for (int i = 0; i < N; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + house[i][j] = Integer.parseInt(st.nextToken()); + } + } + move(0, 1, 'H'); //0,1에서 시작 + System.out.println(answer); + } + + static void move(int x, int y, char dir) { + //각 dir에 따라 갈 방법이 없으면 return + if (dir == 'H' || dir == 'V') { + if (!isPossible(x, y) || house[x][y] == WALL) { + return; + } + } else { + if (!isPossible(x, y) || !isPossible(x-1, y) || !isPossible(x, y-1) || + house[x][y] == WALL || house[x-1][y] == WALL || house[x][y-1] == WALL) { + return; + } + } + + if (x == N - 1 && y == N - 1) { //도착 + answer++; + return; + } + + if (dir == 'H') { //가로 이동 + move(x, y+1, 'H'); //1번 + move(x+1, y+1, 'D'); //2번 + + } else if (dir == 'V') { //세로 이동 + move(x+1, y, 'V'); //1번 + move(x+1, y+1, 'D'); //2번 + + } else { //대각선 이동 + move(x, y+1, 'H'); //1번 + move(x+1, y, 'V'); //2번 + move(x+1, y+1, 'D'); //3번 + } + + } + + static boolean isPossible(int x, int y) { + return x >= 0 && x < N && y >= 0 && y < N; + } +} From ef773f2b8c840d742351c4cdf35086117ee6b19f Mon Sep 17 00:00:00 2001 From: seonghyeok cho <65901319+whqtker@users.noreply.github.com> Date: Tue, 24 Feb 2026 16:46:50 +0900 Subject: [PATCH 12/15] =?UTF-8?q?[Week06]=20BOJ=202580:=20=EC=8A=A4?= =?UTF-8?q?=EB=8F=84=EC=BF=A0=20(#48)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Week04] BOJ 1946: 신입 사원 * [Week04] BOJ 14925: 목장 건설하기 * [Week05] BOJ 6236: 용돈 관리 * [Week05] BOJ 14002: 가장 긴 증가하는 부분 수열 4 * [Week05] BOJ 1781: 컵라면 * [Week06] BOJ 2580: 스도쿠 From e23d80553f95e471262ec7f9c053b64d3694eb95 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 24 Feb 2026 11:47:19 +0000 Subject: [PATCH 13/15] =?UTF-8?q?[Week08]=20=EC=A3=BC=EC=B0=A8=EB=B3=84=20?= =?UTF-8?q?=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EB=B0=8F=20README=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with GitHub Actions --- .../.gitkeep" | 1 + .../.gitkeep" | 1 + .../.gitkeep" | 1 + weekly/week08/README.md | 38 +++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 "weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/.gitkeep" create mode 100644 "weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/.gitkeep" create mode 100644 "weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/.gitkeep" create mode 100644 weekly/week08/README.md diff --git "a/weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/.gitkeep" "b/weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/.gitkeep" new file mode 100644 index 0000000..0e30c04 --- /dev/null +++ "b/weekly/week08/BOJ_13549_\354\210\250\353\260\224\352\274\255\354\247\2103/.gitkeep" @@ -0,0 +1 @@ +# 이번 주도 파이팅!🔥 \ No newline at end of file diff --git "a/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/.gitkeep" "b/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/.gitkeep" new file mode 100644 index 0000000..0e30c04 --- /dev/null +++ "b/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/.gitkeep" @@ -0,0 +1 @@ +# 이번 주도 파이팅!🔥 \ No newline at end of file diff --git "a/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/.gitkeep" "b/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/.gitkeep" new file mode 100644 index 0000000..0e30c04 --- /dev/null +++ "b/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/.gitkeep" @@ -0,0 +1 @@ +# 이번 주도 파이팅!🔥 \ No newline at end of file diff --git a/weekly/week08/README.md b/weekly/week08/README.md new file mode 100644 index 0000000..2a1091b --- /dev/null +++ b/weekly/week08/README.md @@ -0,0 +1,38 @@ +# Week 08 (2026.02.23 ~ 2026.03.01) + +## 📝 이번 주 문제 + +### 문제 1: 회전 초밥 +- **플랫폼**: 백준 / 프로그래머스 / 리트코드 +- **문제 번호**: 2531 +- **난이도**: 실버1 +- **링크**: [문제 링크](https://www.acmicpc.net/problem/2531) + +### 문제 2: 1, 2, 3 더하기 4 +- **플랫폼**: 백준 +- **문제 번호**: 15989 +- **난이도**: 골드 5 +- **링크**: [문제 링크](https://www.acmicpc.net/problem/15989) + +### 문제 3: 숨바꼭질 3 +- **플랫폼**: 백준 +- **문제 번호**: 13549 +- **난이도**: 골드 5 +- **링크**: [문제 링크](https://www.acmicpc.net/problem/13549) + +## 💡 폴더 구조 + +``` +week08/ +├── BOJ_2531_회전초밥/ +├── BOJ_15989_1,2,3더하기4/ +└── BOJ_13549_숨바꼭질3/ +``` + +## ✅ 진행 현황 + +- [ ] @sukangpunch +- [ ] @Hexeong +- [ ] @whqtker +- [ ] @JAEHEE25 +- [ ] @Gyuhyeok99 From 4f0f040222c1c5658afb95d76c735ff18014186e Mon Sep 17 00:00:00 2001 From: sukangpunch Date: Wed, 25 Feb 2026 23:51:37 +0900 Subject: [PATCH 14/15] =?UTF-8?q?[Week08]=20BOJ=202531:=20=ED=9A=8C?= =?UTF-8?q?=EC=A0=84=EC=B4=88=EB=B0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sukangpunch.java" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/sukangpunch.java" diff --git "a/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/sukangpunch.java" "b/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/sukangpunch.java" new file mode 100644 index 0000000..652cd82 --- /dev/null +++ "b/weekly/week08/BOJ_2531_\355\232\214\354\240\204\354\264\210\353\260\245/sukangpunch.java" @@ -0,0 +1,75 @@ +package it_company_work_book.silver; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +// 회전초밥 +// 투포인터, 브루트포스, 슬라이딩 윈도우 +/** + * 현 윈도우 상태에 맞게 현재 먹은 스시 개수 및 중복을 처리할 sushiCounts 배열을 두고, + * 중복과 쿠폰을 고려해서 겹치지 않는 스시 개수를 구할 uniqueCount 을 둔다. + * 초기 슬라이딩 윈도우 값을 구한 다음, 해당 값에서 인덱스를 1씩 이동해가며 윈도우의 처음 인덱스 값을 윈도우의 다음 인덱스를 추가한다. + * 원형 배열이기 때문에 %연산을 통해서 범위를 지정한다. + */ +public class BOJ_2531 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + String []s = br.readLine().split(" "); + int N = Integer.parseInt(s[0]); + int d = Integer.parseInt(s[1]); + int k = Integer.parseInt(s[2]); + int c = Integer.parseInt(s[3]); + + int [] dishes = new int[N]; + + for(int i=0; i Date: Fri, 27 Feb 2026 14:55:09 +0900 Subject: [PATCH 15/15] =?UTF-8?q?[Week08]=20BOJ=2015989:=201,2,3,=20?= =?UTF-8?q?=EB=8D=94=ED=95=98=EA=B8=B0=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sukangpunch.java" | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 "weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/sukangpunch.java" diff --git "a/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/sukangpunch.java" "b/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/sukangpunch.java" new file mode 100644 index 0000000..8a13485 --- /dev/null +++ "b/weekly/week08/BOJ_15989_1,2,3\353\215\224\355\225\230\352\270\2604/sukangpunch.java" @@ -0,0 +1,39 @@ +package it_company_work_book.gold; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +// 1,2,3 더하기 4 +// dp +/** + * 사용할 수 있는 수는 1,2,3 이다. + * 그리고 4를 만들기 위해선 1111, 211,22, 31 등이 가능(순서x) + * 1만 사용했을 때는 4까지 1개의 경우의 수, 1(미리 구해놈)과 2를 사용할때는 2가지 경우의 수, + * 1(미리 구해놈),2(미리 구해놈), 3을 쓸때는 1가지 경우의 수로 총 4가지 경우의 수가 나온다. + */ +public class BOJ_15989 { + + public static void main(String[] args) throws IOException { + BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + + int T = Integer.parseInt(br.readLine()); + + for(int t=0; t=i){ + dp[j] += dp[j-i]; + } + } + } + sb.append(dp[N]).append("\n"); + } + + System.out.println(sb); + } +}