diff --git "a/\355\225\230\353\217\231\354\244\200/240405/boj_17141_\354\227\260\352\265\254\354\206\2142.java" "b/\355\225\230\353\217\231\354\244\200/240405/boj_17141_\354\227\260\352\265\254\354\206\2142.java" new file mode 100644 index 0000000..3cd221d --- /dev/null +++ "b/\355\225\230\353\217\231\354\244\200/240405/boj_17141_\354\227\260\352\265\254\354\206\2142.java" @@ -0,0 +1,109 @@ +import java.util.*; +import java.io.*; + +public class Main { + //연구소 위치 관련 클래스 + static class position{ + int x, y; + public position(int x, int y) { + this.x = x; + this.y = y; + } + } + static int N,M, answer = Integer.MAX_VALUE; + static int[][] laboratory; //연구실 정보 저장 배열 + static position[] route; //M개 선택된 바이러스 위치 저장 배열 + static int[] dx = {0, 0, -1, 1}; //상하좌우 x 변경값 + static int[] dy = {-1, 1, 0, 0}; //상하좌우 y 변경값 + static ArrayList virus = new ArrayList<>(); //바이러스 위치 저장 리스트 + public static void main(String[] args) throws IOException { + //입력값 처리하는 BufferedReader + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + //결과값 출력하는 BufferedWriter + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()," "); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + laboratory = new int[N][N]; + //1. 입력되는 연구소의 정보에서 바이러스의 위치를 저장합니다. + for(int i=0;i queue = new LinkedList<>(); + boolean[][] visited = new boolean[N][N]; + int result = 0; + for(int i=0;i= answer) + return; + int size = queue.size(); + for(int i=0;i=0 && y>=0 && x array; + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + d = Integer.parseInt(st.nextToken()); + n = Integer.parseInt(st.nextToken()); + m = Integer.parseInt(st.nextToken()); + + array = new ArrayList<>(); + for (int i = 0; i < n; i++) { + array.add(Integer.parseInt(br.readLine())); + } + array.add(0); + array.add(d); + Collections.sort(array); + + int left = 0; + int right = d; + int result = 0; + + while (left<=right) { + int mid = (left+right)/2; + int now = 0; + int sum = 0; + for (int i = 1; i < array.size(); i++) { + if (array.get(i) - array.get(now) < mid) { + // 생각한거보다 짧음. 얘는 없애도 돼 + sum++; + } + else now=i; + } + if (sum > m) { + // 너무 없앰. 조금 줄여 + right = mid - 1; + } else { + result = mid; + left = mid + 1; + } + } + + System.out.println(result); + } + +}