문제
https://school.programmers.co.kr/learn/courses/30/lessons/12938
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
중복되는 원소 값이 있는 집합을 만들 수 있다는 것을 이용해야 한다.
집합의 원소의 개수 : n, 모든 원소들의 합 : s
1. n이 s보다 크다면 집합을 만들 수 없기 때문에 -1 리턴
2. n이 s보다 작거나 같을 때 s가 n으로 나누어 떨어지면 모든 원소들을 s/n으로 만든다
예를 들어 n이 3이고 s가 6일 때 최대 곱이 나올수 있는 집합은 {2,2,2}라는 것을 알 수 있다
3. n이 s보다 작거나 같을 때 s가 n으로 나누어 떨어지지 않을때
예를들어 n이 3이고 s가 8일 때를 생각해보자. 이때는 s가 n으로 나누어 떨어지지 않는다.
이럴경우에는 먼저 3개만큼 8/3으로 채워준다. 그리고 나머지는 2가 나오는데 1씩 두 원소에 더해준다.
즉, 모든 원소들을 s/n로 만든 후 s%n개의 원소들에 대해 +1을 해준다
코드
class Solution {
public int[] solution(int n, int s) {
if(n>s){
return new int[] {-1};
}
int[] answer = new int [n];
if(s%n == 0){
for(int i=0;i<n;i++){
answer[i] = s/n;
}
}
else{
for(int i=0;i<n;i++){
answer[i] = s/n;
}
for(int i=n-1;i>n-1-s%n;i--){
answer[i] += 1;
}
}
return answer;
}
}