0
0

JavaScriptで蟻本 貪欲法 コインチェック

Last updated at Posted at 2024-08-08

概要

アルゴリズムを学習をした際の記録を投稿します。
今回は蟻本・貪欲法のコインチェックについてです。

問題

以下引用

>1円玉、5円玉、10円玉、50円玉、100円玉、500円玉が、それぞれC1,C2,C10,C100,C500枚ずつあります
> できるだけ少ない枚数の効果でA円を支払いたいと考えています。
>何枚の効果を出す必要があるでしょうか?なお、その様な支払い方は少なくとも1つは存在するとします。


コード部分


/**  コインチェックpp43
 *
 * @param sum{Number} 金額の合計額
 * @param coinNumbers{Number} 各コインの枚数 要素数は6 1番目は1円、2番目は5円,3番目は10円,4番目は50円,5番目は100円,6番目は500円
 * @return {Number} コインの最小枚数
 */
const  check = (sum,coinNumbers) =>{
    const coinValue = [1,5,10,50,100,500];
    let ans = 0;
    let tempSum = sum;
    console.log(`貪欲法 コインチェック 状態遷移図`);
    console.log(`i|tempSum|ans`);
    console.log(`:--:|:---:|:-----:`);
    for(let i=5;i > 0; i--){
        let tempNumber = Math.min(Math.floor(tempSum/coinValue[i]),coinNumbers[i])
        tempSum -= tempNumber * coinValue[i]
        ans += tempNumber
        console.log(`${i} | ${tempSum} | ${ans}`);
    }
    return ans;
}

//硬貨の問題単体テスト 620円を満たす少ない硬貨の枚数。[1,5,10,50,100,500]円= [3,2,1,3,0,2]
// 結果値6
check(620,[3,2,1,3,0,2])


その他情報

一言

for文1個かつややこしい処理がないので、理解しやすかったです。

依存関係グラフ

依存関係グラフは変数の結びつきを一目でわかりやすくするための図です。
変数の流れを確認しやすくすることでワーキングメモリの負担を減らすことができます。
作成方法はコード上の変数に丸付けて線を繋げています。

image.png

状態遷移表

計算内容を明示する表。
ステップごとの変数の値を各列に表示します。
複雑な計算を行うコードを理解するのに役立つ表です。

i tempSum ans
5 120 1
4 120 1
3 20 3
2 10 4
1 0 6

python tutor

コードを実際に動かせるwebサイト
ステップ実行かつステップ事の変数を確認できる特徴があります。

リンク

参考資料

プログラミングコンテストチャレンジブック [第2版] マイナビ p42

プログラマー脳 秀和システム
p73 python tutor
p71 状態遷移表 
p69 依存関係グラフ

githubコミット部分

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0