diff --git "a/src/algorithm/minje/week5/boj/Q1477/Main_1477_\355\234\264\352\262\214\354\206\214_\354\204\270\354\232\260\352\270\260_\354\241\260\353\257\274\354\240\234.java" "b/src/algorithm/minje/week5/boj/Q1477/Main_1477_\355\234\264\352\262\214\354\206\214_\354\204\270\354\232\260\352\270\260_\354\241\260\353\257\274\354\240\234.java" new file mode 100644 index 0000000..225ed1e --- /dev/null +++ "b/src/algorithm/minje/week5/boj/Q1477/Main_1477_\355\234\264\352\262\214\354\206\214_\354\204\270\354\232\260\352\270\260_\354\241\260\353\257\274\354\240\234.java" @@ -0,0 +1,83 @@ +package algorithm.minje.week5.boj.Q1477; +/* +메모리 : 11720KB +시간 : 80ms + */ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class Main_1477_휴게소_세우기_조민제 { + static int N, M, L; + static int[] diff; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + + StringTokenizer st = new StringTokenizer(br.readLine(), " "); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + L = Integer.parseInt(st.nextToken()); + + diff = new int[N + 1]; + int[] loc = new int[N + 2]; + loc[0] = 0; + StringTokenizer st1 = new StringTokenizer(br.readLine(), " "); + for (int i = 1; i <= N; i++) { + loc[i] = Integer.parseInt(st1.nextToken()); + } + loc[N + 1] = L; + + Arrays.sort(loc); + + //차이구하기 + for (int i = 1; i <= N + 1; i++) { + diff[i - 1] = loc[i] - loc[i - 1]; + } + Arrays.sort(diff); + + int left = 1, right = diff[diff.length - 1]; + int ans = Integer.MAX_VALUE; + while (left <= right) { + int mid = (left + right) / 2; + if (isPassed(mid)) { + ans = Math.min(ans, mid); + right = mid - 1; + continue; + } + left = mid + 1; + } + + sb.append(ans); + bw.write(sb.toString()); + bw.flush(); //왜와이? + } + + public static boolean isPassed(int mid) { + int amount = 0; + for (int i = diff.length - 1; i >= 0; i--) { + if (diff[i] <= mid) break; + int dist = diff[i]; + int divisor = 1; + while (dist > mid) { + dist = diff[i]; + divisor++; + if (dist % divisor != 0) + dist = dist / divisor + 1; + else + dist = dist / divisor; + + } + amount += divisor - 1; + } + + if (amount <= M) return true; + return false; + } +} \ No newline at end of file diff --git "a/src/algorithm/minje/week5/boj/Q1766/Main_1766_\353\254\270\354\240\234\354\247\221_\354\241\260\353\257\274\354\240\234.java" "b/src/algorithm/minje/week5/boj/Q1766/Main_1766_\353\254\270\354\240\234\354\247\221_\354\241\260\353\257\274\354\240\234.java" new file mode 100644 index 0000000..f579c8a --- /dev/null +++ "b/src/algorithm/minje/week5/boj/Q1766/Main_1766_\353\254\270\354\240\234\354\247\221_\354\241\260\353\257\274\354\240\234.java" @@ -0,0 +1,74 @@ +package algorithm.minje.week5.boj.Q1766; + +/* +메모리 : 53276KB +시간 : 476ms + */ + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.LinkedList; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.StringTokenizer; + +public class Main_1766_문제집_조민제 { + static boolean[] problemSolved; + static PriorityQueue problemWillSolved = new PriorityQueue<>(); + static Queue[] adjList; + static int[] remainProblem; + static int N, M; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + + StringTokenizer st = new StringTokenizer(br.readLine(), " "); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + problemSolved = new boolean[N + 1]; + remainProblem = new int[N + 1]; + adjList = new Queue[N + 1]; + + for (int i = 0; i <= N; i++) { + adjList[i] = new LinkedList<>(); + } + + for (int i = 0; i < M; i++) { + StringTokenizer st1 = new StringTokenizer(br.readLine(), " "); + int solvePrev = Integer.parseInt(st1.nextToken()); + int solveNext = Integer.parseInt(st1.nextToken()); + adjList[solvePrev].add(solveNext); + remainProblem[solveNext]++; + } + + for (int i = 1; i <= N; i++) { + if (remainProblem[i] == 0) { + problemWillSolved.offer(i); + problemSolved[i] = true; + } + } + + while (!problemWillSolved.isEmpty()) { + int cur = problemWillSolved.poll(); + sb.append(cur + " "); + int size = adjList[cur].size(); + for (int i = 0; i < size; i++) { + int cand = adjList[cur].poll(); + remainProblem[cand] -= 1; + if (remainProblem[cand] == 0) { + problemSolved[cand] = true; + problemWillSolved.offer(cand); + } + } + } + + bw.write(sb.toString()); + bw.flush(); + } +} diff --git "a/src/algorithm/minje/week5/boj/Q3055/Main_3055_\355\203\210\354\266\234_\354\241\260\353\257\274\354\240\234.java" "b/src/algorithm/minje/week5/boj/Q3055/Main_3055_\355\203\210\354\266\234_\354\241\260\353\257\274\354\240\234.java" new file mode 100644 index 0000000..4bd58fb --- /dev/null +++ "b/src/algorithm/minje/week5/boj/Q3055/Main_3055_\355\203\210\354\266\234_\354\241\260\353\257\274\354\240\234.java" @@ -0,0 +1,120 @@ +package algorithm.minje.week5.boj.Q3055; +/* +메모리 : 11984KB +시간 : 92ms + */ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.*; + +public class Main_3055_탈출_조민제 { + static char[][] map; + static char WATER = '*'; + static char GO_SEUM_DO_CHI = 'S'; + static char BEBBER_CAVE = 'D'; + static char EMPTY_LAND = '.'; + + static int[] dr = {-1, 1, 0, 0}; //상하좌우 + static int[] dc = {0, 0, -1, 1}; +// static int[] GS_LOC; //고슴도치 위치 +// static int[] BC_LOC; //비버의굴 위치 + static int time = 0; + static Queue waterQ = new LinkedList<>(); + static Queue pathQ = new LinkedList<>(); + static int R, C; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + + StringTokenizer st = new StringTokenizer(br.readLine(), " "); + + R = Integer.parseInt(st.nextToken()); + C = Integer.parseInt(st.nextToken()); + + map = new char[R][C]; + + for (int i = 0; i < R; i++) { + char[] input = br.readLine().toCharArray(); + for (int j = 0; j < C; j++) { + inputHandler(input[j], new int[]{i, j}); + map[i][j] = input[j]; + } + } + + do { + time++; + if (pathQ.size() == 0) { + System.out.println("KAKTUS"); + break; + } + waterSpread(); + } while (!moveGS()); + + } + + public static void waterSpread() { + int size = waterQ.size(); + while (size-- > 0) { + int[] cur = waterQ.poll(); + for (int d = 0; d < 4; d++) { + int nr = cur[0] + dr[d]; + int nc = cur[1] + dc[d]; + if (isValidRange(nr, nc) && isEmptyLand(nr, nc)) { + map[nr][nc] = WATER; + waterQ.offer(new int[]{nr, nc}); + } + } + } + } + + public static boolean moveGS() { + int size = pathQ.size(); + while (size-- > 0) { + int[] cur = pathQ.poll(); + for (int d = 0; d < 4; d++) { + int nr = cur[0] + dr[d]; + int nc = cur[1] + dc[d]; + if (isValidRange(nr, nc)) { + if (arrived(nr, nc)) { + System.out.println(time); + return true; + } + if (isEmptyLand(nr, nc)) { + map[nr][nc] = WATER; //물로 방문체크 + pathQ.offer(new int[]{nr, nc}); + } + } + } + } + + return false; + } + + public static boolean isValidRange(int nr, int nc) { + return nr >= 0 && nc >= 0 && nr < R && nc < C; + } + + public static boolean isEmptyLand(int nr, int nc) { + return map[nr][nc] == EMPTY_LAND; + } + + public static boolean arrived(int nr, int nc) { + return map[nr][nc] == BEBBER_CAVE; + } + + public static void inputHandler(char input, int[] curCord) { + if (input == GO_SEUM_DO_CHI) { + pathQ.offer(curCord); + } +// if (input == BEBBER_CAVE) { +// BC_LOC = curCord; +// } + if (input == WATER) { + waterQ.offer(curCord); + } + } +} diff --git "a/src/algorithm/minje/week5/boj/Q3079/Main_3079_\354\236\205\352\265\255\354\213\254\354\202\254_\354\241\260\353\257\274\354\240\234.java" "b/src/algorithm/minje/week5/boj/Q3079/Main_3079_\354\236\205\352\265\255\354\213\254\354\202\254_\354\241\260\353\257\274\354\240\234.java" new file mode 100644 index 0000000..1c65bc9 --- /dev/null +++ "b/src/algorithm/minje/week5/boj/Q3079/Main_3079_\354\236\205\352\265\255\354\213\254\354\202\254_\354\241\260\353\257\274\354\240\234.java" @@ -0,0 +1,76 @@ +package algorithm.minje.week5.boj.Q3079; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class Main_3079_입국심사_조민제 { + static int N, M; + static int[] times; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + times = new int[N]; + for (int i = 0; i < N; i++) { + int input = Integer.parseInt(br.readLine()); + times[i] = input; + } + + Arrays.sort(times); + +// long max = times[times.length - 1]; + long left = 1; +// long right = max * M; + long right = Integer.MAX_VALUE + 1L; + + + /* + 1. times int->long + 2. times * M + 3. right 대입 + */ +// long right = times[times.length - 1] * M; + /* + 1. times * M int형 계산 범위 안에서 + 2. + */ + long mid = 0; + + System.out.println(right); + long ans = Long.MAX_VALUE; + + while (left <= right) { + mid = (left + right) / 2; + + if (isPassed(times, M, mid)) { + ans = ans > mid ? mid : ans; + right = mid - 1; + } else { + left = mid + 1; + } + } + System.out.println(ans); + } + + public static boolean isPassed(int[] times, int n, long mid) { + long amount = 0; + + for (int i = 0; i < times.length; ++i) { + amount += mid / times[i]; + } + + if (amount >= n) return true; + else return false; + } +} diff --git a/src/algorithm/minje/week6/boj/Q1005/Main.java b/src/algorithm/minje/week6/boj/Q1005/Main.java new file mode 100644 index 0000000..ef0cfa9 --- /dev/null +++ b/src/algorithm/minje/week6/boj/Q1005/Main.java @@ -0,0 +1,81 @@ +package algorithm.minje.week6.boj.Q1005; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.LinkedList; +import java.util.Queue; +import java.util.StringTokenizer; + +public class Main{ + static int T, N, K, W, inDegree[], dp[], times[]; + static LinkedList[] adjList; + + public static void main(String[] args) throws Exception { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + + T = Integer.parseInt(br.readLine()); + + for (int tc = 0; tc < T; tc++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + dp = new int[N + 1]; + inDegree = new int[N + 1]; + adjList = new LinkedList[N + 1]; + times = new int[N + 1]; + + for (int i = 0; i < N + 1; i++) { + adjList[i] = new LinkedList<>(); + } + + StringTokenizer st1 = new StringTokenizer(br.readLine()); + for (int i = 1; i <= N; i++) { + int time = Integer.parseInt(st1.nextToken()); + times[i] = time; + } + for (int i = 0; i < K; i++) { + StringTokenizer st2 = new StringTokenizer(br.readLine()); + int from = Integer.parseInt(st2.nextToken()); + int to = Integer.parseInt(st2.nextToken()); + adjList[from].add(to); + inDegree[to]++; + } + + W = Integer.parseInt(br.readLine()); + + Queue q = new LinkedList<>(); + for (int i = 0; i < N + 1; i++) { + if (inDegree[i] == 0) { + q.offer(i); + dp[i] = times[i]; + } + } + + + LOOP: + while (!q.isEmpty()) { + int cur = q.poll(); + if (cur == W) { + break LOOP; + } + + for (int i = 0, size = adjList[cur].size(); i < size; i++) { + int cand = adjList[cur].poll(); + inDegree[cand]--; + dp[cand]=Math.max(dp[cand],dp[cur]+times[cand]); + if (inDegree[cand] == 0) { + q.offer(cand); + } + } + } + + bw.write(dp[W]+"\n"); + } + bw.flush(); + } +} diff --git "a/src/algorithm/minje/week6/pro/\353\263\264\354\204\235\354\207\274\355\225\221/Solution.java" "b/src/algorithm/minje/week6/pro/\353\263\264\354\204\235\354\207\274\355\225\221/Solution.java" new file mode 100644 index 0000000..e3ff3bf --- /dev/null +++ "b/src/algorithm/minje/week6/pro/\353\263\264\354\204\235\354\207\274\355\225\221/Solution.java" @@ -0,0 +1,67 @@ +package algorithm.minje.week6.pro.보석쇼핑; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; + +public class Solution { + static HashMap map = new HashMap(); + + static void putEle(String key) { + if (map.containsKey(key)) { + map.put(key, map.get(key) + 1); + return; + } + map.put(key, 1); + } + + static void removeEle(String key) { + if (map.get(key) == 1) { + map.remove(key); + return; + } + map.put(key, map.get(key) - 1); + } + + public static int[] solution(String[] gems) { + int[] answer = {}; + int minDiff = Integer.MAX_VALUE; + Set set = new HashSet(Arrays.asList(gems)); + + + int i = 0; + int j = 0; + + + while (true) { + + while (j= gems.length && map.size() != set.size()) break; + + while (true) { + removeEle(gems[i]); + i++; + if (map.size() != set.size()) break; + } + + if(minDiff > j-i){ + minDiff=j-i; + answer=new int[]{i,j}; + } + } + + return answer; + } + + public static void main(String[] args) { + int[] result = solution(new String[]{"ZZZ", "YYY", "NNNN", "YYY", "BBB"}); + + System.out.println(result[0] + "," + result[1]); + } +} diff --git "a/src/algorithm/minje/week6/pro/\354\210\230\354\213\235\354\265\234\353\214\200\355\231\224/Solution.java" "b/src/algorithm/minje/week6/pro/\354\210\230\354\213\235\354\265\234\353\214\200\355\231\224/Solution.java" new file mode 100644 index 0000000..4e641ac --- /dev/null +++ "b/src/algorithm/minje/week6/pro/\354\210\230\354\213\235\354\265\234\353\214\200\355\231\224/Solution.java" @@ -0,0 +1,17 @@ +package algorithm.minje.week6.pro.수식최대화; + +public class Solution { + + public long solution(String expression) { + long answer = 0; + + boolean[] aa = new boolean[3]; + + boolean[] b= aa.clone(); + + + return answer; + } +} + + diff --git "a/src/algorithm/minje/week6/pro/\354\210\230\354\213\235\354\265\234\353\214\200\355\231\224/SolutionTest.java" "b/src/algorithm/minje/week6/pro/\354\210\230\354\213\235\354\265\234\353\214\200\355\231\224/SolutionTest.java" new file mode 100644 index 0000000..d325709 --- /dev/null +++ "b/src/algorithm/minje/week6/pro/\354\210\230\354\213\235\354\265\234\353\214\200\355\231\224/SolutionTest.java" @@ -0,0 +1,20 @@ +package algorithm.minje.week6.pro.수식최대화; + + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class SolutionTest { + + @org.junit.jupiter.api.Test + void solution() { + String expression = "100-200*300-500+20"; + int exp = 60420; + Solution solution = new Solution(); + long result = solution.solution(expression); + + assertEquals(exp,result); + } + +} \ No newline at end of file diff --git "a/src/algorithm/minje/week6/pro/\355\202\244\355\214\250\353\223\234_\353\210\204\353\245\264\352\270\260/Main.java" "b/src/algorithm/minje/week6/pro/\355\202\244\355\214\250\353\223\234_\353\210\204\353\245\264\352\270\260/Main.java" new file mode 100644 index 0000000..67be5ac --- /dev/null +++ "b/src/algorithm/minje/week6/pro/\355\202\244\355\214\250\353\223\234_\353\210\204\353\245\264\352\270\260/Main.java" @@ -0,0 +1,7 @@ +package algorithm.minje.week6.pro.키패드_누르기; + +public class Main { + public static void main(String[] args) { + Solution s = new Solution(); + } +} diff --git "a/src/algorithm/minje/week6/pro/\355\202\244\355\214\250\353\223\234_\353\210\204\353\245\264\352\270\260/Solution.java" "b/src/algorithm/minje/week6/pro/\355\202\244\355\214\250\353\223\234_\353\210\204\353\245\264\352\270\260/Solution.java" new file mode 100644 index 0000000..1921586 --- /dev/null +++ "b/src/algorithm/minje/week6/pro/\355\202\244\355\214\250\353\223\234_\353\210\204\353\245\264\352\270\260/Solution.java" @@ -0,0 +1,10 @@ +package algorithm.minje.week6.pro.키패드_누르기; + +public class Solution { + public String solution(int[] numbers, String hand) { + String answer = ""; + return answer; + } +} + +