문제 링크
문제 해설
문제를 풀기 위해 먼저 크레인의 무게 제한과 박스의 무게를 내림차순으로 정렬한다. 가장 짧은 시간 내에 모든 박스를 배로 옮기기 위해선 아직 남아있는 상자 중에 각 크레인이 옮길 수 있는 가장 무거운 상자를 옮겨야 한다. 구현 과정은 다음과 같다.
- 크레인의 무게 제한과 박스의 무게를 내림차순으로 정렬한다.
- 크레인의 가장 큰 무게제한보다 무거운 상자가 있다면 즉시 -1을 출력하고 프로그램을 종료한다.
- 그 외의 경우에는 현재 옮겨야 할 박스의 무게와 크레인의 무게제한을 비교하여 아래의 동작을 수행한다.
- 현재 크레인의 무게 제한이 박스 무게보다 크다면 박스를 옮기고 다음 크레인으로 이동한다.
- 현재 크레인의 무게 제한이 박스 무게보다 작다면 다음 박스와 크레인의 무게 제한을 비교한다.
- 모든 크레인의 무게 제한을 박스의 무게와 비교하였다면 minutes 값을 1 증가시키고 다시 첫 크레인부터 비교하는 것을 반복한다.
반복문이 종료된 후에 minutes 값을 출력한다.
Code
import java.util.StringTokenizer
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val crains = StringTokenizer(readLine()).run { IntArray(n) { nextToken().toInt() }.sortedArrayDescending() }
val m = readLine().toInt()
val boxes = StringTokenizer(readLine()).run {
val temp = ArrayList<Int>()
repeat(m) { temp.add(nextToken().toInt()) }
temp.sortDescending()
temp
}
if (crains[0] < boxes[0]) {
println(-1)
return@with
}
var minutes = 0
while (boxes.isNotEmpty()) {
var boxIndex = 0
var crainIndex = 0
while (crainIndex < crains.size) {
if (boxIndex == boxes.size) break
if (crains[crainIndex] >= boxes[boxIndex]) {
boxes.removeAt(boxIndex)
crainIndex++
} else {
boxIndex++
}
}
minutes++
}
println(minutes)
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 17390 : 이건 꼭 풀어야 해! (0) | 2022.12.28 |
---|---|
[Kotlin] 백준 25325 : 학생 인기도 측정 (0) | 2022.12.25 |
[Kotlin] 백준 1456 : 거의 소수 (1) | 2022.12.23 |
[Kotlin] 백준 25192 : 인사성 밝은 곰곰이 (0) | 2022.12.21 |
[Kotlin] 백준 14277 : 등차 수열과 등비 수열 (0) | 2022.12.21 |
댓글