알고리즘 문제 풀이/백준

[Algorithm] 백준 - 웰컴 키트 (30802) (Kotlin)

참깨빵위에참깨빵_ 2024. 9. 19. 15:26
728x90
반응형

 

말이 긴데 결국 정리하면

 

  • 3번 입력의 첫 번째 수(T)를 통해 티셔츠의 최소 묶음 수를 계산
  • 3번 입력의 두 번째 수(P)를 통해 펜의 최대 묶음 수를 계산

 

2가지를 계산해서 println()을 2번 써서 출력하면 된다. 티셔츠는 남아도 되는데 부족하면 안 되고, 펜은 참가자 수에 맞춰 정확하게 준비해야 하는 것에 주의한다.

 

fun main() {
    val n = readln().toInt()  // 총 참가자 수
    val sizes = readln().split(" ").map { it.toInt() }  // 티셔츠 사이즈별 신청 수
    val (T, P) = readln().split(" ").map { it.toInt() }  // 티셔츠 묶음, 펜 묶음 크기
    
    var tshirtBundles = 0
    for (size in sizes) {
        tshirtBundles += ceil(size.toDouble() / T).toInt()
    }
    println(tshirtBundles)
    
    val penBundles = n / P
    val remainingPens = n % P
    println("$penBundles $remainingPens")
}

 

ceil()은 반올림해주는 메서드인데 생소하다면 공식문서의 내용을 참고한다.

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.math/ceil.html

 

ceil - Kotlin Programming Language

 

kotlinlang.org

주어진 값을 양의 무한대를 향한 정수로 반올림한다

리턴값 = 주어진 값보다 크거나 같은 최소 배수의 정수값이다. 

 

테스트 케이스에서 S~XXL까지는 각각 3, 1, 4, 1, 5명이 신청했고 T(3번 입력의 첫 번째 숫자)는 5다. 최소 묶음 수는 5인데 3, 1, 4, 1, 5명이 신청한 상태고, 티셔츠는 남아도 상관없기 때문에 신청자 수를 T로 나눠서 올림한 다음 더한다.

이 결과로 5를 얻는데 XXXL은 9기 때문에 1묶음만 주문하면 4명이 못 받게 된다. 그래서 2묶음을 주문해야 하기 때문에, 총 티셔츠 최소 묶음 수는 7이 된다.

펜은 총 참가자 수를 펜 묶음 크기(7)로 나눈 몫(=펜 묶음 수), 나머지(=펜 묶음 수 외의 추가 주문량)를 각각 출력하면 된다. 이렇게 하면 펜은 남는 것 없이 모든 참가자에게 한 자루씩 나눠줄 수 있게 된다.

반응형