[プログラマー]楽透の最高順位と最低順位C++


問題の説明
楽透6/45(以下「楽透」と略称する)は典型的な宝くじで、1~45の数字に6つ印刷して推測することができる.次は宝くじのランキングを決める方法です.1
ランキング当選内容
6個の番号がすべて一致
25個の番号が一致
34個の番号が一致
3つの番号が一致
5と2個の番号が一致
6(落尖)その他
宝くじを購入したミンウは、当選番号の発表日を楽しみにしていた.しかし、敏宇の弟は宝くじに落書きをして、番号の一部が分からなくなった.当選番号が発表された後、敏宇は自分が購入した宝くじの当選の最高順位と最低順位を知りたいと思っています.
購入した6つの宝くじ番号が44、1、0、0、3125だとします.6つの当選番号がそれぞれ31、10、45、1、6、19の場合、当選可能な最高および最低の例は以下の通りである.
当選番号3110451619結果
最高順位310→10410→625の4つの番号が一致し、3位
最下位310→114410→725の2つの番号が一致し、5位
順序のいかんにかかわらず、購入した宝くじに当選番号に該当する番号があれば、正解と認定されます.
10と6の2つの知らない番号を持っていると、3位になります.
他にも3位を作る方法があります.しかし、私たちはそれを2位以上にすることはできません.
11と7の2つの知らない番号があるとします.5位になります.
他にも5位を作る方法があります.しかし、彼を6位にすることは不可能だ.
パラメータは敏宇が購入した宝くじ番号を含む宝くじ、当選番号の宝くじである.このとき、可能な最高順位と最低順位を配列に順番に入れて戻ります.
せいげんじょうけん
lottosは整数配列で、長さは6です.
lottosのすべての要素は45以下の整数です.
0は認識できない数字を表します.
0以外の数字はlottosで2つを超えない.
lottosの要素が整列していない可能性があります.
win numsは長さ6の整数配列である.
win numsのすべての要素は1または45未満の整数です.
win numsには同じ数字が複数含まれていません.
win numsの要素が整列していない可能性があります.
I/O例
lottos win_nums result
[44, 1, 0, 0, 31, 25][31, 10, 45, 1, 6, 19] [3, 5][0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25][1, 6]
[45, 4, 35, 20, 3, 9][20, 9, 3, 45, 4, 35] [1, 1]
I/O例説明
I/O例#1
問題の例を以下に示します.
I/O例#2
下に読めない番号があれば、一等賞と六等賞に当たってもいいです.
当選番号209345435結果
最高位0→20→90→30→45→40→35の6つの番号が一致、1位
最低順位0→21 0→220→23 0→24 0→25 0→26の番号が一致、6等
I/O例#3
敏宇が購入した宝くじの番号と当選番号が一致したため、最高順位と最低順位が1位だった.
📌 コード#コード#
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int result(int n) {
    if(n == 6) {
        return 1;
    } else if(n == 5) {
        return 2;
    } else if(n == 4) {
        return 3;
    } else if(n == 3) {
        return 4;
    } else if(n == 2) {
        return 5;
    } else { return 6; }
}

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    // 오름차순 정렬
    sort(lottos.begin(), lottos.end()); 
    sort(win_nums.begin(), win_nums.end());
    
    int collect = 0;
    int ze = 0;
    for(int i=0; i<6; i++) {
        if(lottos[i] == 0) { ze++; }
        else { break; }
    }
    
    int temp = ze;
    for(int i=0; i<6; i++) {
        if(temp == 6) { break; }
        for(int j=temp; j<6; j++) {
            if(win_nums[i] == lottos[j]) { collect++; temp = ++j; break; }
        }
    }
    answer.push_back(result(collect+ze));
    answer.push_back(result(collect));
    
    return answer;
}
プログラマーは出力をチェックできないと思っていましたが、😓