Algorithms
수정·

[Programmers] Lv3 최고의 집합

by Dohoon Kim · 23년 11월 02일 14:07:53

Programmers Lv3 최고의 집합

문제 설명

모든 원소가 자연수이고 원소의 개수가 n개인 집합 S가 있다. S의 모든 원소를 더한값이 s가 되고 모든 원소를 곱한 값이 최대가 되는 S` 를 구하라.

접근 방식

  1. n개의 크기를 가진 정수 배열 arr 을 선언
  2. s를 n으로 나눈 정수 값 k를 arr의 각 원소에 할당
  3. s를 n으로 나눈 나머지 값 d를 구함
  4. d가 0이 될 때 까지 d를 1 씩 감소 시키며 arr의 각 원소를 라운드로빈으로 1씩 증가

Source

import java.util.*;

class Solution {
    public int[] solution(int n, int s) {
        int [] answer = new int[n];
        
        if(n > s) {
            return new int[]{-1};
        }
        
        int base = s / n;
        int remain = s % n;
        
        for(int i = 0 ; i < answer.length ; i++) {
            answer[i] = base;
        }
        
        for(int i = 0 ; i < remain ; i++) {
            int offset = i % n;
            answer[offset]++;
        }
        
        Arrays.sort(answer);
        
        return answer;
    }
}