프로그래머스 - 최고의 집합

leehyunjon·2022년 9월 13일
0

Algorithm

목록 보기
114/162

최고의 집합 : https://school.programmers.co.kr/learn/courses/30/lessons/12938


Problem


Solve

n개로 이루어진 중복 집합에서 n개의 요소 합이 s이고 요소의 곱이 최대가 되는 집합을 구하는 문제.

이것 저것 건드려보다가 곱이 가장 크려면 각 요소들이 최대한 커야할것이라고 생각이 들고나서부터 각 요소들이 최대한 1보다 크게 만들어지도록 찾아봤습니다.

s/n으로 나온 값이 모든 요소들의 기본값이 되고, 나누어 떨어지지 않는다면 나머지 값의 개수만큼 +1을 해준다면 최대의 곱이 나오게 됩니다.


Code

import java.util.Arrays;
class Solution {
    public int[] solution(int n, int s) {
    	//s가 n보다 작다면 최고의 집합을 만들 수 없다.
        if(n>s) return new int[]{-1};
        
        int[] answer = new int[n];
        
        //집합의 모든 요소들을 s/n의 값으로 초기화
        for(int i=0;i<n;i++){
            answer[i] = s/n;
        }
        
        //나누어 떨어지지 않는다면 나머지 값만큼의 요소의 개수에 +1을 해준다.
        if(s%n != 0){
            for(int i=0;i<s%n;i++){
                answer[i]++;
            }
        }
        
        Arrays.sort(answer);
        
        return answer;
    }
}

Result


Reference

profile
내 꿈은 좋은 개발자

0개의 댓글