[프로그래머스] 최고의 집합
https://school.programmers.co.kr/learn/courses/30/lessons/12938
중복 집합
(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합
이라고 합니다.예를 들어
1) { 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 } -> { 4, 5 }
2) { 1, 7 }, { 2, 6 }, { 3, 5 }, { 4, 4 } -> { 4, 4 }
s를 n으로 나눈 몫
으로 배열의 모든 요소를 초기화한다.s를 n으로 나눈 나머지
를 배열에 1씩 나눠준다.class Solution {
public int[] solution(int n, int s) {
int[] answer;
// n이 s보다 크면 불가능
if(n > s) {
answer = new int[]{-1};
return answer;
}
int init = s / n; // 몫
int mod = s % n; // 나머지
answer = new int[n];
// 몫으로 모든 값을 초기화
for(int i = 0; i < n; i++) {
answer[i] = init;
}
// 나머지 만큼 뒤에서부터(오름차순 정렬이 되게) 1씩 더해줌
int idx = n - 1;
for(int m = 0; m < mod; m++) {
answer[idx]++;
idx--;
}
return answer;
}
}