[プログラマー/完探/level 1]模擬試験


[プログラマー]模擬試験

問題の主なタイプ

  • フルナビゲーションを使用する典型的なカウント問題
  • 問題の重要な戦略


    正解が
  • の場合、記入した答えと一致すれば正解数を算出する.
  • 学習の内容


  • 問題を解決する過程で、いくつかの解題方法はカウントソートに似ているので、계수 정렬を再検索します.
  • 계수 정렬:ソートされた状態で、各値の周波数を決定することができる.
  • 時間複雑度:O(n)
  • 欠点:小数(n)と大きく異なる数字が集まり、効率がずっと低い.
    (0, 200, 0, 100)

    解題コード

    import java.util.*;
     
    class Solution {
        public List<Integer> solution(int[] answers) {
            int[] answer = {};
    
            int[] supoja1 = {1, 2, 3, 4, 5};
            int[] supoja2 = {2, 1, 2, 3, 2, 4, 2, 5};
            int[] supoja3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    
            int[] correct_num = new int[4];
    
            for (int i = 0; i < answers.length; i++) {
                if (answers[i] == supoja1[i % supoja1.length]) {
                    correct_num[1]++;
                }
                if (answers[i] == supoja2[i % supoja2.length]) {
                    correct_num[2]++;
                }
                if (answers[i] == supoja3[i % supoja3.length]) {
                    correct_num[3]++;
                }
            }
    
            int max = Integer.MIN_VALUE;
            for (int correct : correct_num) {
                max = correct > max ? correct : max;
            }
    
            List<Integer> list = new ArrayList<>();
            for (int i = 1; i < correct_num.length; i++) {
                if(correct_num[i] == max){
                    list.add(i);
                }
            }
    
            return list;
        }
    }