코테/백준
[백준/JAVA] 1654번: 랜선 자르기
imname1am
2023. 6. 29. 00:21
반응형
🔺 문제
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int K = Integer.parseInt(st.nextToken()); // 이미 갖고 있는 랜선 개수
int N = Integer.parseInt(st.nextToken()); // 필요한 랜선 개수
long max = 0;
long min = 0;
long mid = 0;
long[] A = new long[K];
for(int i = 0 ; i < K ; i++) {
A[i] = Long.parseLong(br.readLine());
if(A[i] > max) max = A[i];
}
/** 🔔 이진 탐색 🔔 **/
max++;
while(min < max) {
mid = (min + max) / 2;
long total = 0;
for(int i = 0 ; i < K ; i++) {
total += A[i] / mid;
}
if(total < N) {
max = mid;
} else {
min = mid + 1;
}
}
System.out.println(min - 1); // 최적값 조정
}
}
|
cs |
✅ 해결 아이디어
✔ 이진 탐색
- Line 33 : total이 N보다 작다는 것은, mid 값이 너무 크다는 의미이므로 max 값을 더 작게 조정
💥 유의사항
• Line 24 : 반드시 max에서 +1 값이어야 함.
• Line 40 : 마지막에 출력할 때 min이 아닌, min - 1로 해줘야 함.
💬 느낀 점
이진 탐색.. 오랜만이고....
그렇다...
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준] 1654번 : 랜선 자르기 - JAVA [자바]
https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,0
st-lab.tistory.com
반응형