[Java]プログラマー-「宝くじの最高と最低ランキング」


問題の説明
宝くじを購入したミンウは、当選番号の発表日を楽しみにしていた.しかし、敏宇の弟は宝くじに落書きをして、番号の一部が分からなくなった.当選番号が発表された後、敏宇は自分が購入した宝くじの当選の最高順位と最低順位を知りたいと思っています.
購入した6つの宝くじ番号が44、1、0、0、3125だとします.6つの当選番号がそれぞれ31、10、45、1、6、19の場合、当選可能な最高および最低の例は以下の通りである.
最高順位=4桁一致->3位
最下位=2番照合->5等
パラメータは敏宇が購入した宝くじ番号を含む宝くじ、当選番号の宝くじである.このとき、可能な最高順位と最低順位を配列に順番に入れて戻ります.
ランキング当選内容16個全部一致25個番号一致34個番号一致43個番号一致52個番号一致6個(当選)その他
せいげんじょうけん
  • lottosは整数配列で、長さは6です.
  • lottosのすべての要素は45以下の整数です.
  • 0は識別不可能な数字を表す.
  • 0を除き、lottosには複数の数字は含まれていません.
  • lottosの要素が整列していない可能性があります.
  • win numsは長さ6の整数配列である.
  • win numsのすべての要素は45より大きい整数です.
  • win numsには同じ数字が複数含まれていません.
  • win numsの要素が整列していない可能性があります.
  • 立軸力の例
    lottoswin_numsresult[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]
    アルゴリズム#アルゴリズム#
  • 0と当選番号を同時にそれぞれカウントします.
  • switchを利用して、当選番号などの場合のcountで最低点を求めます.
  • switchを使用して、最低段数から0を引いたときのcountで、最高段数が得られます.
  • 最初のコード作成時にエラーの例を提出し、以下のテストケースを追加して修復し、解決しました.
  • | [1, 2, 3, 4, 5, 6] | [7, 8, 9, 10, 11, 12] | [6, 6] |
    マイソース
    class Solution {
        public int[] solution(int[] lottos, int[] win_nums) {
            int[] answer = {0, 0};
            int zero_cnt = 0, same_cnt = 0;
            
            for(int i=0;i<6;i++) {
                // 해당 번호가 0일 경우
                if(lottos[i] == 0) {
                    zero_cnt++;
                    continue;
                }
                
                // 해당 번호가 당첨 번호에 존재하는지
                for(int j=0;j<6;j++) {
                    if(lottos[i] == win_nums[j]) {
                        same_cnt++;
                        break;
                    }
                }
            }
            
            // 최저 등수 구하기
            switch (same_cnt) {
                case 2:  answer[1] = 5;
                         break;
                case 3:  answer[1] = 4;
                         break;
                case 4:  answer[1] = 3;
                         break;
                case 5:  answer[1] = 2;
                         break;
                case 6:  answer[1] = 1;
                         break;
                default: answer[1] = 6;
                         break;
            }
            
            // 최저 등수에서 0의 갯수를 빼면 최고 등수
            switch (answer[1] - zero_cnt) {
                case 0:  answer[0] = 1;
                         break;
                default: answer[0] = answer[1] - zero_cnt;
                         break;
            }
            
            return answer;
        }
    }