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_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); + } +} 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); + } +} 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; + } +} 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; + } +} 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; + } + +} 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; + } +}