문제번호 알고리즘 : 난이도 : 문제 https://www.acmicpc.net/problem/16401 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static int man; public static int snackCount; public static int[] snackList; public static int size = 0; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); man = Integer.parseInt(st.nextToken()); snackCount = Integer.parseInt(st.nextToken()); snackList = new int[snackCount]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < snackList.length; i++) { snackList[i] = Integer.parseInt(st.nextToken()); } Arrays.sort(snackList); // 이진 탐색을 위한 초기값 설정 long left = 1; // 최소 길이는 1 long right = snackList[snackCount - 1]; // 최대 길이는 가장 긴 과자 길이 long maxLength = 0; // 최대 길이 초기화 // 이진 탐색 while (left <= right) { long mid = (left + right) / 2; int count = 0; // 현재 mid 길이로 나눌 수 있는 친구 수 계산 for (int snack : snackList) { count += snack / mid; // 각 과자에서 mid 길이로 나눌 수 있는 개수 추가 } if (count >= man) { // 나눌 수 있는 친구 수가 충분하면 maxLength = mid; // 최대 길이 갱신 left = mid + 1; // 길이를 늘려본다 } else { right = mid - 1; // 길이를 줄인다 } } System.out.println(maxLength); // 결과 출력 } } 시행착오 참고자료 함께 보면 좋은 글, 링크 등.### 문제번호 알고리즘 : 난이도 : 문제 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static int[] liquids; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int number = Integer.parseInt(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine()); liquids = new int[number]; for(int i =0 ; i<number ; i++){ liquids[i] = Integer.parseInt(st.nextToken()); } Arrays.sort(liquids); // 용액 배열을 정렬 int[] result = new int[3]; // 결과를 저장할 배열 (세 개의 용액) long minDiff = Long.MAX_VALUE; // 최소 합 차이를 저장할 변수 초기화 // 첫 번째 용액을 고정하고 두 번째, 세 번째 용액을 찾기 위한 반복문 for (int i = 0; i < number - 2; i++) { int left = i + 1; // 두 번째 용액의 인덱스 시작 int right = number - 1; // 세 번째 용액의 인덱스 시작 // 두 번째와 세 번째 용액의 인덱스를 조정하는 반복문 while (left < right) { // 현재 선택된 세 용액의 합 계산 long sum = (long) liquids[i] + liquids[left] + liquids[right]; // 현재 합의 절대값이 최소 차이보다 작으면 업데이트 if (Math.abs(sum) < minDiff) { minDiff = Math.abs(sum); // 최소 차이 갱신 result[0] = liquids[i]; // 첫 번째 용액 저장 result[1] = liquids[left]; // 두 번째 용액 저장 result[2] = liquids[right]; // 세 번째 용액 저장 } // 합이 0보다 작으면 더 큰 값을 찾기 위해 left 인덱스 증가 if (sum < 0) { left++; } else { // 합이 0보다 크면 더 작은 값을 찾기 위해 right 인덱스 감소 right--; } } } Arrays.sort(result); // 결과 배열을 오름차순으로 정렬 System.out.println(result[0] + " " + result[1] + " " + result[2]); // 결과 출력 } } 시행착오 풀 면서 자신이 했던 시행착오들 참고자료 함께 보면 좋은 글, 링크 등.