👨👨👧👧[プログラマー]最適な集合
3880 ワード
問題の説明
n個の自然数からなる繰り返し集合(複数の集合、都合のよい後に総称して「集合」と呼ぶ)では、以下の2つの条件を満たす集合を最適集合と呼ぶ.
各要素の和はSの数の集合である.
上記の条件を満たす各要素の積の最大の集合.
{ 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 }
各要素の最大積{4,5}が最適な集合である.
セット内の要素の個数nとすべての要素の和sをパラメータとして指定した場合、最適なセットを返す解関数を完了します.
せいげんじょうけん
最良のセットは、昇順に並べられた1次元配列(list,vector)を返します.
最適なセットが存在しない場合は、1次元配列(list,vector)に-1を入力して返します.
自然数の個数nは、1以上10000以下の自然数である.
すべての要素の合計は、1または10または1000000以下の自然数です.
I/O例
I/O例説明
I/O例#1
問題の例.
I/O例#2
2つの自然数は1つと1つの集合を構成することはできない.したがって、-1を含む配列が返されます.
I/O例#3
2つの自然数の集合のうち、要素の和が8の集合は以下の通りである.
{ 1, 7 }, { 2, 6 }, { 3, 5 }, { 4, 4 }
各要素の最大積{4,4}は最適な集合である.
プールの開始
function solution(n, s) {
// n이 s보다 크다면 [1,1,1] 도 만족하지 못하므로 불가능
if(n > s) return [-1]
// s/n 은 가장 고른 배열을 만들 수 있는 값이므로 n의 길이를 가진 배열을 s/n으로 채움
const arr = Array(n).fill(Math.floor(s/n))
// 나눈 후 나머지 값은 오름차 순 배열의 조건을 만족시키기 위해 배열의 뒤에서 부터 +1 하며 채워줌
if(s%n) {
for(let i = n-1, more = s%n ; more > 0 ; i --,more--) {
arr[i] = arr[i]+1
}
}
return arr
}
Reference
この問題について(👨👨👧👧[プログラマー]最適な集合), 我々は、より多くの情報をここで見つけました https://velog.io/@kwb020312/프로그래머스-최고의-집합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol