PS(Problem Solving)/BOJ

[백준/BOJ] 1500번: 최대 곱

JunsuKim 2022. 2. 14.
728x90

https://www.acmicpc.net/problem/1500

 

1500번: 최대 곱

세준이는 정수 S와 K가 주어졌을 때, 합이 S인 K개의 양의 정수를 찾으려고 한다. 만약 여러개일 경우 그 곱을 가능한 최대로 하려고 한다. 가능한 최대의 곱을 출력한다. 만약 S=10, K=3이면, 3,3,4는

www.acmicpc.net

문제

세준이는 정수 S와 K가 주어졌을 때, 합이 S인 K개의 양의 정수를 찾으려고 한다. 만약 여러개일 경우 그 곱을 가능한 최대로 하려고 한다.

가능한 최대의 곱을 출력한다.

만약 S=10, K=3이면, 3,3,4는 곱이 36으로 최대이다.

해설

a와 b가 있다 하자.

a % b == 0이라면 최대 곱의 결과는 (a / b)b이 된다.

예를 들어 10 2가 있을 때 최대 곲은 5 * 5인 25가 된다.

 

이제 a % b !=0일 때를 보자.

10 3이 있을 때 최대 곲은 3 * 3 * 4인 36이다.

 

result라는 변수를 1로 선언해두자.

10 / 3을 b - a % b만큼 result에 곱한다.

따라서 3을 2번 result에 곱한 것이다.

 

이제 4가 남는다.

3 3을 하여 남는 값이 4이므로 a / b + 1이 된다.

 

다른 예시로 7 2를 보자.

7 % 2 != 0이다.

따라서 7 / 2를 1번 곱하고, 7 / 2 + 1을 한번 곱한 12가 된다.

소스 코드

import kotlin.math.pow

fun main() = with(System.`in`.bufferedReader()) {
    val (s, k) = readLine().split(" ").map { it.toLong() }
    var result = 1L
    if(s % k == 0L) result = (s / k.toDouble()).pow(k.toDouble()).toLong()
    else {
        var temp = s % k
        for(i in 0 until k - temp) result *= s / k
        for(i in 0 until temp) result *= s / k + 1
    }
    println(result)
}

 

728x90

댓글