[Javascript]プログラマー-予算


問題の説明


S社は各部門が物品を購入するのに必要な金額を調査し、各部門が必要とする物品をサポートした.ただし、予算が完全であるため、すべての部門の製品を購入することはできません.だから私はあなたにできるだけ多くの部門の品物を購入させたいです.
物品を購入する場合、各部門が申請した金額に基づいてすべてのサポートを提供しなければならない.例えば、1000元を申請する部門は、1000元未満のサポートを正確に提供し、1000元未満のサポートを提供しなければならない.
各部門に申請金額を含む配列dと予算予算がパラメータとしてある場合は、最大何部門までサポートできるかを返すソルバを完了します.

せいげんじょうけん


dは、各部門の申請金額を含む配列であり、長さ(部門全体の数)が1または100以上である.
dの各要素は、各部門の申請金額を表し、各部門の申請金額は1以上100000以下の自然数である.
予算は予算を表し、自然数は1000000を超えない.

I/O例



I/O例説明


I/O例#1


各部門は[1元,3元,2元,5元,4元]の金額を報告した.1元、2元、4元の部門の物品を申請する場合、予算は9元から7元で、残りは2元です.正しい申請金額に常に従ってサポートする必要があります.残りの2元は他の部門にサポートされません.上記の方法に加えて、次のこともできます.
1元、2元、3元の部門の物品を申請するには6元が必要です.
1元、2元、5元の部門の物品を申請するには8元が必要です.
1元、3元、4元の部門の物品を申請するには8元が必要です.
1元、3元、5元の部門の物品を申請するには9元が必要です.
3つ以上の部門の品物を購入することはできません.そのため、最大3つの部門の品物を購入することができます.

I/O例#2


すべての部門の品物を買ってくれれば、10元です.そのため、最大4つの部門の品物を購入することができます.

問題を解く

function solution(d, budget) {
    var answer = 0;
    let budget_count = 0;
    d = d.sort((a,b) => a-b); //오름차순 정렬
    for(let i = 0 ; answer <= budget; i++){ //budget이 answer보다 크거나 같으면 반복문 멈춤
        answer += d[i];
        budget_count = i;
    }

  return budget_count;
}
    
条件を考えるのに苦労した.
他の人は配列からreduce()メソッドとpopを減算し,配列から1つを減算して配列の長さを求めた.
この意味では、まずreduce()を見て、今日のアルゴリズムの問題を完成しなければなりません.

Array.prototype.reduce()


arr.reduce(callback[, initialValue])
배열.reduce((누적val, 현재val, index, 요소) => { return 결과 }, 초기값);
初期値を設定しない場合は、自動的に0に設定されます.
let arr = [1, 2, 3, 4, 5]
const result = arr.reduce((prev, cur) => {
  return prev + cur 
}, 0);
console.log(result); // 15; 
reduce内部で返す関数としてprev+curを与えたのでarrの総和を得た.
別の例を見てみましょう.
let arr = [
	{name : "미정", age : 23}
    {name : "지현", age : 29}
    {name : "동현", age : 31}
    {name : "송희", age : 6}
    {name : "재상", age : 50}
]
let result = arr.reduce((prev, cur) => {
	if( cur.age > 25 ) {
      prev.push(arr.name)
    }return prev;
, []}

console.log(result); // "지현", "동현", "재상"
初期値は空の配列に設定されます.arr[0]から回転し,curの年齢が25歳を超えるとprev配列に押し込む.
定義されていない場合は25以下、初期値は空の配列であるため、定義されていない場合が確定しても空の配列はprevに戻される.
ジヒョンの場合は25を超えるので、空のprev配列にジヒョンの名前を入れます.
このように帰ります.
初対面なので、まだ慣れていませんが、頑張って活用しましょう.

人の解答した問題を参考にする

function solution(d, budget) {
    let answer = 0;
    d = d.sort((a,b) => a-b);
    d.reduce((prev, cur) => {
      if(prev+cur <= budget){ 
        answer++;
        return prev+cur;
      }
    }, 0);

    return answer;
}
prev+curの値が予算より小さい場合は、答えを計算し、初期値0にprev+curを入れて次の値に移動します.