模擬試験


#2020. 09. 17

問題の説明


数学は数学を放棄する人の略語である.「囚人3人組」は模擬試験で数学の問題を全部撮りたいと思っている.最初の問題から最後の問題まで、執胞子は以下の通りである.
1番捕手の撮り方:1,2,3,4,5,1,2,3,4,5...
2番捕手の撮り方:2、1、2、3、2、4、2、5、2、2、3、2、4、2、5...
3番捕手の撮り方:3,3,1,1,2,2,4,5,5,3,3,1,2,2,4,5,5...
最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.

せいげんじょうけん

  • 試験には最大10000問が含まれています.
  • 題の正解は1,2,3,4,5の1つです.
  • 点数が一番高い人が何人かいる場合は、返される値を昇順に並べてください.
  • I/O例


    answersreturn[1, 2, 3, 4, 5][1][1, 3, 2, 4, 2][1, 2, 3]

    に答える

    import java.util.Arrays;
    import java.util.ArrayList;
    
    class Solution {
        public int[] solution(int[] answers) {
            int[] answer = {};
            int[] supo1 = {1, 2, 3, 4, 5};
            int[] supo2 = {2, 1, 2, 3, 2, 4, 2, 5};
            int[] supo3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
            int score[] = new int[3];
            for(int i = 0; i < answers.length; i++) {
                if(answers[i] == supo1[i % 5]) score[0]++;
                if(answers[i] == supo2[i % 8]) score[1]++;
                if(answers[i] == supo3[i % 10]) score[2]++;
            }
            int max = Math.max(Math.max(score[0], score[1]), score[2]);
            ArrayList<Integer> arr = new ArrayList<>();
            for(int i = 0; i < score.length; i++) {
                if(max == score[i]) arr.add(i + 1);
            }
            answer = new int[arr.size()];
            for(int i = 0; i < arr.size(); i++) {
                answer[i] = arr.get(i);
            }
            Arrays.sort(answer);
            return answer;
        }
    }
    思ったより時間がかかって解けました逮捕者の撮影ルールを考えています...考えが複雑になったので、配列に入れました.😣 アレイに入れるとずっと気持ちがいいです.
    捕手が3人しかいないため、score配列も大きさを3に制限している.
    答え配列responseの各インデックスの答えが実行者ごとにコミットされた答えと同じである場合、score配列では実行者順にスコアが向上します.
    スコア配列で最高点を取得します.maxでスコアを求め、戻る配列にスコア(最高点など)を配置します.多くの人なら昇順のアレックスsortソート配列を使用!