Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
26225c6
[Week05] BOJ 1781: 컵라면
sukangpunch Feb 6, 2026
85fce18
[Week05] BOJ 6236: 용돈 관리
JAEHEE25 Feb 11, 2026
a9b6480
[Week05] BOJ 6236: 용돈 관리 (#43)
whqtker Feb 11, 2026
63d2bf7
[Week05] BOJ 1781: 컵라면
sukangpunch Feb 12, 2026
3b76b89
[Week06] PGS 181188: 요격 시스템
sukangpunch Feb 12, 2026
7c787b2
[Week05] PGS: 요격 시스템
JAEHEE25 Feb 12, 2026
07053d6
[Week06] PGS 181188: 요격 시스템
sukangpunch Feb 13, 2026
c8e3cac
[Week06] BOJ 17070: 파이프 옮기기
sukangpunch Feb 13, 2026
482c4fe
[Week05] BOJ 14002: 가장 긴 증가하는 부분 수열 4
JAEHEE25 Feb 13, 2026
dfd1336
[Week06] BOJ 2580: 스도쿠
sukangpunch Feb 14, 2026
526695f
[Week06] BOJ 17070: 파이프 옮기기
sukangpunch Feb 14, 2026
e329d03
[Week05] BOJ 1781: 컵라면
JAEHEE25 Feb 20, 2026
c09e3f7
[Week06] BOJ 2580: 스도쿠
JAEHEE25 Feb 24, 2026
41e4a36
[Week06] BOJ 17070: 파이프옮기기1
JAEHEE25 Feb 24, 2026
000347c
Merge pull request #54 from solid-connection/JAEHEE25
JAEHEE25 Feb 24, 2026
ef773f2
[Week06] BOJ 2580: 스도쿠 (#48)
whqtker Feb 24, 2026
e23d805
[Week08] 주차별 디렉토리 및 README 생성
actions-user Feb 24, 2026
dbcc8dd
[Week06] BOJ 2580: 스도쿠
sukangpunch Feb 24, 2026
4f0f040
[Week08] BOJ 2531: 회전초밥
sukangpunch Feb 25, 2026
84e9a11
[Week08] BOJ 2531: 회전초밥
sukangpunch Feb 27, 2026
70ec702
[Week08] BOJ 15989: 1,2,3, 더하기 4
sukangpunch Feb 27, 2026
36c4978
[Week08] BOJ 15989: 1,2,3, 더하기 4
sukangpunch Feb 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions personal/JAEHEE25/PGS/문자열_압축.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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<Integer> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
43 changes: 43 additions & 0 deletions weekly/week05/BOJ_1781_컵라면/JAEHEE25.java
Original file line number Diff line number Diff line change
@@ -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<Integer> 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);
}
}
70 changes: 70 additions & 0 deletions weekly/week05/BOJ_1781_컵라면/sukangpunch.java
Original file line number Diff line number Diff line change
@@ -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<Problem> {

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<Problem> 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<Integer> 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);
}
}
44 changes: 44 additions & 0 deletions weekly/week05/BOJ_1781_컵라면/whqtker.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int main() {
int n;
cin >> n;

vector<pair<int, int>> 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<int,vector<int>,greater<int>> 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;
}
51 changes: 51 additions & 0 deletions weekly/week05/BOJ_6236_용돈관리/JAEHEE25.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Loading
Loading