プログラマアルゴリズム-シミュレーション試験


質問する


数学は数学を放棄する人の略語である.「囚人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つです.
点数が一番高い人が何人かいる場合は、戻った値を昇順に並べてください.

もんだいぶんせき

  • 各捕獲者のルールを探します.
  • それぞれいくつか正解しました
  • 一番多い数を当てて、その人たちを引き出します.
  • に並んで降ります.
  • に答える

    import java.util.*;
    
    class Solution {
        public int[] solution(int[] answers) {
            int [] one = {1,2,3,4,5};
            int[] two = {2,1,2,3,2,4,2,5};
            int[] three = {3,3,1,1,2,2,4,4,5,5};
            
            // 1,2,3의 맞춘수를 담은 배열
            int[] score = new int[3];
            
            // 1,2,3의 맞춘 수 담기
            for(int i = 0; i < answers.length ; i++) {
                if (answers[i] == one[i%one.length]) {
                    score[0]++;
                }
    
                if (answers[i] == two[i%two.length]) {
                    score[1]++;
                }
    
                if (answers[i] == three[i%three.length]) {
                    score[2]++;
                }
            }
            
            // 가장 많이 맞춘 개수
            int max = Arrays.stream(score).max().getAsInt();
            
            int count = 0; // 가장 많이맞춘 사람 수 
            for (int i = 0; i < score.length ; i++) {
                if (score[i] == max) {
                    count++;
                }
            }
            
            // 맞춘 사람의 수대로 배열 만들고 담는다. 
            ArrayList<Integer> list = new ArrayList<Integer>();
            if(max==score[0]) list.add(1); 
            if(max==score[1]) list.add(2);
            if(max==score[2]) list.add(3);
            
            int[] answer = new int[list.size()];
            
            for(int i =0; i<answer.length; i++) {
            	answer[i] = list.get(i);
            }
            
            return answer;
        }
    }