[프로그래머스/Java] Lv.3 최고의 집합

이은정·2024년 12월 10일

프로그래머스/Java

목록 보기
67/74

문제

풀이

이 문제는 집합 안에 있는 원소들의 차이가 가장 적을 때 곱이 가장 크다.
그래서 합을 이용해서 모든 수를 고르게 분배해야 한다.

먼저 s/n 한 값을 n만큼 가지고 있는다.
그 다음에 (s/n + s%n)만큼의 개수는 s/n+1이다. s/n+1개만큼 (s/n + s%n)를 먼저 배열에 넣는다.

그러면 s/n 값의 개수는 n에서 (s/n + s%n)만큼의 개수를 뺀 값이 된다.(s/n + s%n)+1을 배열에 해당하는 개수만큼 넣는다.

코드

class Solution {
    public int[] solution(int n, int s) {
        // 개수가 합보다 큰 경우에는 집합이 존재할 수 없다
        if (n > s) {
            return new int[]{-1};
        }
        
        int num = s / n;
        int cntOfPlus1 = s % n;
        
        int[] answer = new int[n];
        
        for (int i = 0; i < (n - cntOfPlus1); i ++) {
            answer[i] = num;
        }
        
        for (int i = n - cntOfPlus1; i < n; i ++) {
            answer[i] = num+1;
        }
        
        return answer;
    }
}

결과

느낀 점

풀이를 머리로는 완벽하게 이해하고 코드로도 쉽게 작성할 수 있는데 풀이를 말로 설명하려니까 너무 어렵다. 좀 더 풀어서 설명하는 방법도 연습해야겠다.

profile
돈 많은 백수가 꿈인 백엔드 개발자 지망생

0개의 댓글