본문 바로가기
알고리즘/문제 풀이

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

by 위대한초밥V 2023. 10. 24.

https://school.programmers.co.kr/learn/courses/30/lessons/12938

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

설명

처음에는 제한 조건을 걸고 모든 집합을 구하려고 하였다.

하지만 가장 큰 원소의 곱의 합의 특징은 집합 내의 원소들의 값 차이가 크지 않다는 점이다.

따라서 원소의 합을 집합 개수로 나눈 몫을 구하고 나머지를 배열에 하나씩 넣어서 잡합 내의 원소 곱이 최대인 배열을 구할 수 있었다.

코드

class Solution {
    static int[] selected;
    static int target_n;
    static int target_s;
    public int[] solution(int n, int s) {
        int[] answer = new int[n];
        
        if(n > s) {
            answer = new int[]{-1};
            return answer;
        }
        
        int init = s / n;   // 몫
        int mod = s % n;    // 나머지
        
        for(int i = 0; i < n; i++) {
            answer[i] = init;
        }
        
        int idx = n - 1;
        for(int m = 0; m < mod; m++) {
            answer[idx]++;
            idx--;
        }
        return answer;
    }   
}
반응형