본문 바로가기

프로그래머스(Java)/Level 3

[프로그래머스] 최고의 집합

728x90

코드 힌트:

  1. 불가능한 경우 처리:
    • 만약 n이 s보다 크다면, n개의 숫자로 s를 나누는 것이 불가능하기 때문에 결과 배열로 {-1}을 반환합니다.
  2. 평균 분배:
    • s를 n으로 나눈 몫을 모든 배열 요소에 기본 값으로 설정합니다.
    • 이렇게 하면 각 요소가 가능한 한 균등하게 값을 가지게 됩니다.
  3. 나머지 분배:
    • s가 n으로 정확히 나누어 떨어지지 않는 경우, 나머지를 배열의 뒤에서부터 하나씩 분배합니다.
    • 이렇게 하면 배열이 내림차순으로 정렬된 상태를 유지할 수 있습니다.

 

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int[] solution(int n, int s) {
        int[] result = new int[n]; // 길이가 n인 결과 배열 생성
        
        // 주어진 s를 n개의 숫자로 나누는 것이 불가능한 경우
        if (n > s) {
            return new int[]{-1}; // -1을 담은 배열 반환
        }
        
        // 결과 배열의 모든 요소를 s / n의 값으로 초기화
        Arrays.fill(result, s / n);
        
        // s가 n으로 나누어 떨어지지 않는 경우
        if (s % n != 0) {
            int remainder = s % n; // 나머지를 계산
            // 나머지를 결과 배열의 뒤에서부터 하나씩 분배
            for (int i = n-1; remainder > 0; i--) {
                result[i]++; // 각 요소에 1씩 더해줌
                remainder--; // 나머지 감소
            }
        }
        
        return result; // 결과 배열 반환
    }
}
728x90