구현 문제입니다.
숫자 n과 그 합인 s가 주어졌을 때, 곱이 최대가 되는 집합을 구하는 문제입니다.
n=2, s=9가 주어졌다고 가정하겠습니다.
이에 따르는 집합은 {1,8}, {2,7}, {3,6}, {4,5}입니다.
여기서 곱이 최대인 집합은 {4,5}입니다.
예제로 짐작할 수 있듯이, 최대 곱은 집합의 원소의 편차가 가장 적을 때 발생합니다.
편차를 작게하려면 s/n으로 이루어진 집합을 우선 구한 뒤, 나머지가 있을 때 원소에 각각 1씩 더해주면 됩니다.
나머지는 무조건 n보다 작기 때문에 집합의 최소 값은 s/n 입니다.
즉, 나머지가 없을 경우 최대는 s/n이고, 나머지가 있을 경우 최대는 (s/n)+1입니다.
[구현 코드]
import java.util.Arrays;
class Solution {
public static int[] solution(int n, int s) {
int[] nums = new int[n];
int di = s/n;
int re = s%n;
if(di == 0){
return new int[]{-1};
}else{
for(int i=0; i<n; i++) nums[i] = di;
for(int i=0; i<re; i++) nums[i] +=1;
}
Arrays.sort(nums);
return nums;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 야근 지수(Java) (0) | 2022.10.22 |
---|---|
프로그래머스 - 네트워크(Java) (0) | 2022.10.21 |
프로그래머스 - N으로 표현(Java) (0) | 2022.10.21 |
프로그래머스 - 타겟 넘버(Java) (0) | 2022.10.11 |
프로그래머스 - 삼각 달팽이(Java) (0) | 2022.10.08 |