본문 바로가기

Algorithm/Math

(C++) - 프로그래머스(연습문제) : 최고의 집합

반응형

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

 

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

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

programmers.co.kr

수학 문제였습니다.

 

풀이방법

 1. 몫이 0이라면 -1을 담아 반환합니다. 그 외에 가장 곱이 크기 위해서는 s/n값이 n개 있을 때 입니다. 따라서 s/n값을 n개 가지고 있는 vector ans를 선언합니다.

 

 2. ans의 끝부터 끝 - s%n 으로 오면서 나머지를 1씩 배분해줍니다.

 

 3. 정답을 반환합니다.

 

Code

#include <bits/stdc++.h>
using namespace std;

vector<int> solution(int n, int s) {
    int start = s/n;
    int margin = s % n;
    if(start == 0) return {-1};
    vector<int> answer(n,start);
    for(int i = n - 1; i > n - 1 - margin; i--){
        answer[i]++;
    }        
    return answer;
}