[백준/JAVA] BOJ 1500 - 최대 곱

NAGANG LEE·2024년 1월 15일

알고

목록 보기
48/118

👀 문제

1500번: 트럭 ✨ 실버 2

세준이는 정수 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);
		
	}

}

profile
모바일 개발자를 목표로 하고 있어요 💭

0개의 댓글