[220212] TIL


1.情報処理技術者のメモを学ぶ
  • プログラミング言語の使用
    1)サーバプログラムの実施
    2)プログラミング言語を使用する
  • 2.コセット
    卒業プレゼント(完全探求)

  • 質問:学生たちはそれぞれプレゼントの価格、配送費をメモして、先生は限られた予算で、できるだけ多くの学生にプレゼントを買いたいと思っています.先生はギフト券を持っていて、半額でプレゼントを買うことができます.(運賃X)最大学生数を印刷します.(2 D配列)

  • 悩ましいところ
    -先物価格と運賃を加算した金額を昇順にソートしたいのですが、仮配列に加算してソートすると半額先物価格の金額を差し引くことはできません.これを行うには、2 D配列をソートする必要がありますが、私は方法を知りません.
  • -プレゼントの値段が一番高いのは半額ですか.一つずつ試してみますか.sum変数の一つを半額に減らして、次のプレゼントが買えるまで、だめなら一番高いものを除いて...呜呜呜呜...私は二中の文だと知っていますが、変数は書いても削除しても、書いても削除しても......要するに言い尽くせない困難だ.最后にやはり懐に抱くことができませんでした...
  • 先生解答
    -商品価格、配送料を加算した価格を昇順にソートします.(sort内蔵関数を使用)
    ->2 D配列のsort関数のソート方法を理解しました.
    -一番高い商品の価格を半減する必要はありません.すべての状況は試しなければならない.
  • function solution(m, product){
        let answer=0;
        let n=product.length;
        product.sort((a, b) => (a[0]+a[1])-(b[0]+b[1]));
    
        for(let i=0; i<n; i++){
            let money=m-(product[i][0]/2+product[i][1]);
            let cnt=1;
            for(let j=0; j<n; j++){
                if(j!==i && (product[j][0]+product[j][1])>money) break;
                if(j!==i && (product[j][0]+product[j][1])<=money) {
                    money-=(product[j][0]+product[j][1]);
                    cnt++;
                }
            }
            answer=Math.max(answer, cnt);
        }
        
        
        
        return answer;
    }
    
    let arr=[[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
    console.log(solution(28, arr));
  • 感じ
    探求しにくい