【paiza×Qiita】ランクA:お菓子の詰め合わせをやってみた（C#）


paiza×Qiitaコラボキャンペーン
「キャンペーン対象問題を解いて、書いたコードや感想をQiitaに投稿しよう！」
に参加してみました！
 
 https://paiza.jp/pages/campaign/paiza-qiita

## お菓子の詰め合わせ
苦手なLINQをなるべく使うようにしました。

https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking




```c#:
using System;
using System.Collections;
using System.ComponentModel.Design.Serialization;
using System.Security.Cryptography.X509Certificates;

namespace izoffice
{
    class Program
    {
        //お菓子の最大個数
        private static readonly int OKASHI_MAX = 20;
        //制限金額最大値
        private static readonly int SEIGEN_MAX = 5000;


        static void Main()
        {
            string[] stArrayData = Console.ReadLine().Trim().Split(' ');
            //お菓子の個数
            var N = int.Parse(stArrayData[0]);
            List<RecordClass> recordClassList = new List<RecordClass>();
            //制限金額
            int seigenKingaku = int.Parse(stArrayData[1]);

            if (N >= OKASHI_MAX)
            {
                //お菓子を最大個数以上入力していないか確認
                Console.WriteLine("お菓子は20個までです。");
                return;

            }
            if (seigenKingaku >= SEIGEN_MAX)
            {
                //制限値以上のお菓子の値段を入力していないか確認
                Console.WriteLine("お菓子は5000円までです。");
                return;

            }
            if (seigenKingaku < 1)
            {
                //お菓子の金額を０円に設定していないか確認
                Console.WriteLine("金額は1円以上を入力してください。");
                return;

            }

            //N行のお菓子の値段を取得する
            for (var i = 0; i < N; i++)
            {
                RecordClass record = new RecordClass();
                int nedan = int.Parse(Console.ReadLine().Trim());
                if (nedan < 1)
                {
                    //0円お菓子を入力していないか確認
                    Console.WriteLine("お菓子の金額は1円以上を入力してください。");
                    return;

                }
                else if (nedan > SEIGEN_MAX)
                {
                    //制限金額以上入力していないか確認
                    Console.WriteLine("お菓子の金額は5000円未満を入力してください。");
                    return;

                }
                else
                {
                    record.Score = nedan;

                }
                recordClassList.Add(record);

            }
            int otsuri = 0;
            //購入したいお菓子の合計値を求める
            int sum = recordClassList.Sum(record => record.Score);

            foreach (RecordClass record in recordClassList)
            {

                if (sum > seigenKingaku)
                {
                    //制限金額を超えている場合
                    int min = recordClassList.Min(record => record.Score);
                    //欲しいお菓子の合計から一番安いお菓子の値段の差を求める
                    sum = sum - min;

                    List<RecordClass> copyList = new List<RecordClass>();
                    RecordClass copy = new RecordClass();
                    copy.Score = min;
                    copyList.Add(copy);

                    //お菓子の合計から最小の値段のお菓子を削除する
                    recordClassList.Remove(copy);

                }
                else if (sum <= seigenKingaku)
                {
                    //制限金額以内
                    otsuri = seigenKingaku - sum;

                }
            }

            Console.WriteLine("お菓子の合計 = {0}, おつり={1} ", sum, otsuri);
        }
    }

    /// <summary>
    /// お菓子の値段を記録するクラス
    /// </summary>
    public class RecordClass
    {
        public int Score { get; set; }

    }


}
```

## おわりに
おもしろそうなキャンペーンが実施されていたので参加してみました！
プログラミングを勉強中の方の参考になればと思います！

今回のプログラムは「C#」歴の長い社員に作成を依頼しました！
[株式会社アイズ](http://iz-office.com)には様々なキャリアを積んだ社員が在籍しています。
少しでも気になった方は、採用情報は[こちら](http://iz-office.com)から！