Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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);
}
}
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);
}
}
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;
}
}
63 changes: 63 additions & 0 deletions weekly/week06/BOJ_17070_파이프옮기기1/JAEHEE25.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
80 changes: 80 additions & 0 deletions weekly/week06/BOJ_2580_스도쿠/JAEHEE25.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
24 changes: 24 additions & 0 deletions weekly/week06/PGS_요격시스템/JAEHEE25.java
Original file line number Diff line number Diff line change
@@ -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;
}
}