Algorithm/Programmers(c++)

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

kim-hasa 2021. 9. 24. 14:49

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

 

코딩테스트 연습 - 최고의 집합

자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만

programmers.co.kr

자연수 n개를 더해서 s가 되야하는 집합 중 곱했을 때 가장 큰 수가 나오는 집합을 리턴하는 문제입니다.

 

모두가 같은 수 혹은 근접한 수일 때 가장 큰 값이 나옵니다.

 

가장 먼저 s값을 n으로 나누고 , 그 몫을 벡터에 넣습니다.

 

그 후 나머지를 구해서 뒤에서부터 나머지의 숫자만큼 1씩 증가시킵니다(오름차순 정렬 때문에). 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int s) {
    vector<int> answer;
    
    if(s < n)   // s가 n보다 작은 경우, n개의 수로는 s를 만들 수 없음
    {
        answer.push_back(-1);
        return answer;
    }
    
    int div = s / n;    // 나눈 몫
    int divn = s % n;   // 나눈 나머지
    
    for(int i=0; i<n; i++)  // 몫을 넣음
    {
        answer.push_back(div);
    }
    
    if(divn != 0)   // 나머지가 있다면
    {
        for(int j=n-1; j >= n - divn; j--)  // 뒤에서부터 1씩 증가시키기
        {
            answer[j]++;
        }
    }
    
    return answer;
}