세준이는 정수 S와 K가 주어졌을 때, 합이 S인 K개의 양의 정수를 찾으려고 한다. 만약 여러개일 경우 그 곱을 가능한 최대로 하려고 한다.
가능한 최대의 곱을 출력한다.
만약 S=10, K=3이면, 3,3,4는 곱이 36으로 최대이다.
수학 산술평균
곱이 최대가 되기 위해서는 1의 개수가 최대한 적어야 한다.
예시 1 ) S = 13, K = 8
13 = 8 * 1 + 5 (몫 1, 나머지 5)
13을 위와 같이 나타낼 수 있는데 나머지 수만큼 반복하여 1씩 몫에 나누어 주면 된다.
그러면, 2 + 2 + 2 + 2 + 2 + 1 + 1 + 1 이렇게 되고 1이 가장 적은 조합이 만들어진다.
예시 2) S = 26, K = 7
26 = 7 * 3 + 5 (몫 3, 나머지 5)
나머지를 1씩 다섯 번 몫에 나누어 준다.
그러면 4 + 4 + 4 + 4 + 4 + 3 + 3이 되고, 최대 곱의 조합이 완성된다.
💯 답은 9223372036854775807보다 작기 때문에 정답 변수는 long으로 선언해 줘야 한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class MaxMultiple {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
long answer = 1;
int mok = s / k;
int nam = s % k;
for (int i = 0; i < nam; i++) {
answer *= (mok + 1);
}
for (int i = 0; i < k - nam; i++) {
answer *= mok;
}
System.out.println(answer);
}
}