728x90
<오늘의 학습 키워드>
- 이분탐색법
<오늘의 문제>
제목 : 백준 / 브론즈2 / 27160번 할리갈리
https://www.acmicpc.net/problem/1654
<풀이>
처음 틀린답
더보기
package BOJ.탐색.랜선자르기_1654.insub2004_250114;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strings = br.readLine().split(" ");
int N = Integer.parseInt(strings[0]);
long M = Long.parseLong(strings[1]);
long max = 0;
List<Long> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
long input = Long.parseLong(br.readLine());
if (input > max) {
max = input;
}
list.add(input);
}
long result = getResult(max, list, M);
System.out.println(result);
}
private static long getResult(long max, List<Long> list, long M) {
long result = 0;
long start = 1;
long end = max;
while (start <= end) {
long mid = (start + end)/2;
long totalSum = 0;
for (int i = 0; i < list.size(); i++) {
totalSum += list.get(i) / mid;
}
if (totalSum == M) {
result = mid;
break;
} else if (totalSum < M) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return result;
}
}
정답 맞은 답
더보기
package BOJ.탐색.랜선자르기_1654.insub2004_250114;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strings = br.readLine().split(" ");
int N = Integer.parseInt(strings[0]);
long M = Long.parseLong(strings[1]);
long max = 0;
List<Long> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
long input = Long.parseLong(br.readLine());
if (input > max) {
max = input;
}
list.add(input);
}
long result = getResult(max, list, M);
System.out.println(result);
}
private static long getResult(long max, List<Long> list, long M) {
long result = 0;
long start = 1;
long end = max;
while (start <= end) {
long mid = (start + end)/2;
long totalSum = 0;
for (int i = 0; i < list.size(); i++) {
totalSum += list.get(i) / mid;
}
if (totalSum < M) {
end = mid - 1;
} else {
result = mid;
start = mid + 1;
}
}
return result;
}
}
해설
<결론, 주의할점>
반응형
'Study or Lecture > 항해 99클럽 코딩테스트 스터디' 카테고리의 다른 글
| 항해 99클럽 코딩테스트 스터디 5기 1일차 TIL (자바 / 미들러) (0) | 2025.01.13 |
|---|---|
| 항해 99클럽 코딩테스트 스터디 31일차 TIL (자바 / 비기너) (1) | 2024.11.27 |
| 항해 99클럽 코딩테스트 스터디 29일차 TIL (자바 / 비기너) (1) | 2024.11.26 |
| 항해 99클럽 코딩테스트 스터디 27일차 TIL (자바 / 비기너) (0) | 2024.11.23 |
| 항해 99클럽 코딩테스트 스터디 22일차 TIL (자바 / 비기너) (0) | 2024.11.19 |
댓글