[コード練習]Programmers-楽透の最高と最低順位


久しぶりにコードの勉強を再開したい…!
これは、準備期間中に、長期投資が必要なコット(コードテスト)の準備を時間を割くことを決意したからです.💪🏻
COM共先輩たちのアドバイスと調査結果を経て、プログラマーでコードを練習することにした.
ではこれからto beコードリーダースタート!😤

問題の説明📄


楽透6/45(以下「楽透」と略称する)は典型的な宝くじで、1~45の数字に6つ印刷して推測することができる.次は宝くじのランキングを決める方法です.

宝くじを購入したミンウは、当選番号の発表日を楽しみにしていた.しかし、敏宇の弟は宝くじに落書きをして、番号の一部が分からなくなった.当選番号が発表された後、敏宇は自分が購入した宝くじの当選の最高順位と最低順位を知りたいと思っています.
購入した6つの宝くじ番号が44、1、0、0、3125だとします.6つの当選番号がそれぞれ31、10、45、1、6、19の場合、当選可能な最高および最低の例は以下の通りである.

順序が
  • であれ、購入した宝くじに当選番号に該当する番号があれば、正解と認定されます.
  • では、2つの非表示の番号がそれぞれ10と6であると仮定すると、3位になります.
    *他にも3位を獲得する方法があります.しかし、私たちはそれを2位以上にすることはできません.
  • は、11と7の2つの知らない番号を持っていると仮定し、5位になります.
    *他にも5位を作る方法があります.しかし、彼を6位にすることは不可能だ.
  • パラメータは敏宇が購入した宝くじ番号を含む宝くじ、当選番号の宝くじである.このとき、可能な最高順位と最低順位を配列に順番に入れて戻ります.

    せいげんじょうけん🚫

  • lottosは整数配列で、長さは6です.
  • lottosのすべての要素は45以下の整数です.
    -0は認識できない数字を表します.
    -0以外の数字はlottosで2つを超えない.
    -lottosの要素が整列していない可能性があります.
  • win numsは長さ6の整数配列である.
  • win numsのすべての要素は45より大きい整数です.
    -win numsには同じ数字が複数含まれていません.
    -win numsの要素が整列していない可能性があります.
  • I/O例🔍



    解法🤓


    久しぶりにコードして、どこから始まるか分かりません.
    だから空のノートを開けて、簡単に与えられた問題を自分の表現に整理して、アルゴリズムを思い出します!
    私が使っているアルゴリズムは大体次の通りです.
  • win nums(当選番号)の最初の要素から、最後の要素をlottos(敏宇が購入した宝くじ)の要素と比較し、一致する番号を探します.
  • に一致すると、match count(一致個数)変数の個数が1増加し、lottosから番号が削除されます.
  • lottosの整数0の個数を求め、zero count(0の個数)変数に格納する.
  • match countとzero countの和を用いて
  • 最高順位のマッチング総数の変数total countを求めた.
  • スイッチドアを用いて
  • の最高順位と最低順位をそれぞれ求めた.
    △同じ機能を持つswitch文の繰り返し使用を避けるために、個別の関数として呼び出そうとしたが、エラーで次は他のコードから方法を探そうとした.🤔)
  • コメントリンク📍


    ベクトル使用法—T-Story
    find、count関数を使用してベクトル要素を検索する
    問題を解決した後、私が想像していたより簡単だと気づいた.
    「久しぶりにやったからそうなんだよ!」そして自信を持って
    コードキャプテンになるまでファイティング~!🙏🏻

    コード#コード#👩🏻‍💻


    📎 Githubリンク
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int rank(int count);
    vector<int> solution(vector<int> lottos, vector<int> win_nums) {
        
        vector<int> answer;
        int key = 0;
        int match_count = 0;
        int zero_count = 0;
        cout << "win_nums.size() = " << win_nums.size() << endl;
        
        for(int i = 0; i < win_nums.size(); i++) {
            key = win_nums[i];
            if (find(lottos.begin(), lottos.end(), key) != lottos.end()) {
                cout << "found matched number!" << endl;
                match_count ++;
                lottos.erase(remove(lottos.begin(),lottos.end(),key), lottos.end());
            }
        }
        cout << "match_count: " << match_count << endl;
        
        zero_count = count(lottos.begin(), lottos.end(), 0);
        cout << "zero_count: " << zero_count << endl;
        
        int total_count = match_count + zero_count;
        int ranking = 0;
        
        switch(total_count) {
            case 6:
                ranking = 1;
                break;
            case 5:
                ranking = 2;
                break;
            case 4:
                ranking = 3;
                break;
            case 3:
                ranking = 4;
                break;
            case 2:
                ranking =5;
                break;
            default:
                ranking =6;
        }
        
        answer.push_back(ranking);
        
            switch(match_count) {
            case 6:
                ranking = 1;
                break;
            case 5:
                ranking = 2;
                break;
            case 4:
                ranking = 3;
                break;
            case 3:
                ranking = 4;
                break;
            case 2:
                ranking =5;
                break;
            default:
                ranking =6;
        }
        answer.push_back(ranking);
        
        return answer;
    }