728x90
https://www.acmicpc.net/problem/1500
문제
세준이는 정수 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
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 2631번: 줄세우기 (0) | 2022.02.14 |
---|---|
[백준/BOJ] 1189번: 컴백홈 (0) | 2022.02.14 |
[백준/BOJ] 1455번: 뒤집기 II (0) | 2022.02.14 |
[백준/BOJ] 18870번: 좌표 압축 (0) | 2022.02.13 |
[백준/BOJ] 11729번: 하노이 탑 이동 순서 (0) | 2022.02.13 |
댓글