[프로그래머스] 최고의 집합 (C++)

공부 스파이럴·2024년 5월 16일
0

프로그래머스

목록 보기
15/18

문제

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

아이디어1

산술 기하

a1+a2++ann(a1a2an)1n{{a_1 + a_2 + \dots + a_n}\over {n}} \geq (a_1 a_2 \dots a_n)^{1\over n} (단, 등호는 a1=a2==ana_1 = a_2 = \dots = a_n일 때만 성립)

  • n개의 원소에 대해 합이 s가 되는 수 중 각 원소들의 곱이 최대가 되는 집합
  • a1+a2++an=s{a_1 + a_2 + \dots + a_n} = s
  • a1a2an=ma_1 a_2 \dots a_n = m

  • 즉, mm이 최대 MM이 되기 위해선 ai=sna_i = {s \over n}이 되어야 함
  • 하지만 aia_i들은 자연수이어야 함

  • qqssnn으로 나눴을 때의 몫
  • rrssnn으로 나눴을 때의 나머지
  • M=qnr(q+1)rM = q^{n-r} * (q+1)^r

  • 더 자세한 내용은 생략
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int s) {
    vector<int> answer;
    
    if (n > s)
        return { -1 };
    
    int q = s / n;
    int r = s % n;
    
    answer = vector<int>(n - r, q);
    answer.resize(n, q + 1);        
    
    return answer;
}

0개의 댓글

관련 채용 정보