-
[백준][Kotlin]2343번 기타 레슨백준 2023. 3. 20. 16:03728x90
해당 문제는 이진 탐색을 사용하여 풀 수 있는 문제였습니다.
주어진 자료 중 가장 큰 값이 정답이 될 수 있는 최소값이 되며, 자료의 합이 정답이 될 수 있는 최대 값이 됩니다.
최소값과 최대값의 중간값으로 비교하며, 최대값과 최소값의 증감을 정하여 다시 중간값으로 비교하면서 최적의 해를 찾으면 되는 문제입니다.
하기는 제가 작성한 해당 문제의 제출 코드와 제출 결과입니다.
import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader import java.io.OutputStreamWriter import java.lang.Math.max import java.util.* import kotlin.collections.ArrayList import kotlin.collections.HashSet fun main() { val br = BufferedReader(InputStreamReader(System.`in`)) //var bw = BufferedWriter(OutputStreamWriter(System.out)) var st = StringTokenizer(br.readLine()) val N = st.nextToken().toInt() val M = st.nextToken().toInt() var arr = IntArray(N){0} st = StringTokenizer(br.readLine()) repeat(N){ arr[it] = st.nextToken().toInt() } var start = arr.max() var end = arr.sum() while(start < end){ var count = 1 val mid = (start+end)/2 var sum = 0 for(num in arr){ if(sum + num <= mid){ sum+=num } else { sum = num count++ } } if(count <= M){ end = mid }else{ start = mid+1 } } println(start) //bw.flush() //bw.close() }
'백준' 카테고리의 다른 글
[백준][Kotlin]11047번 문제 동전 0 (0) 2023.03.20 [백준][Kotlin]1300번 K번째 수 (0) 2023.03.20 [백준][Kotlin]1920번 수 찾기 (0) 2023.03.20 [백준][Kotlin]1167번 트리의 지름 (0) 2023.03.20 [백준][Kotlin] 1520번 내리막 길 (0) 2023.03.13