수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
- 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
- 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
- 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열
answers
가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해 주세요.
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해 주세요.
answers | return |
---|---|
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] answer;
int []type1 = {1,2,3,4,5};
int []type2 = {2,1,2,3,2,4,2,5};
int []type3 = {3,3,1,1,2,2,4,4,5,5};
int [] count = new int[3];
ArrayList<Integer> p1 = new ArrayList<>();
ArrayList<Integer> p2 = new ArrayList<>();
ArrayList<Integer> p3 = new ArrayList<>();
for(int i = 0; i < answers.length; i++){
p1.add(type1[i % type1.length]);
p2.add(type2[i % type2.length]);
p3.add(type3[i % type3.length]);
}
for(int i = 0; i < answers.length; i++){
if(answers[i] == p1.get(i)) count[0]++;
if(answers[i] == p2.get(i)) count[1]++;
if(answers[i] == p3.get(i)) count[2]++;
}
int max = -1, maxIndex = 0, num = 1;
for(int j = 0; j < count.length; j++){
if(max < count[j]){
max = count[j];
maxIndex = j;
}
if(max == count[j] && maxIndex != j)
num++;
}
answer = new int[num];
int index = -1;
for (int i = 0; i < count.length; i++){
if(max == count[i])
answer[++index] = i + 1;
}
return answer;
}
}
솔직히 통과할 줄 몰랐는데 돼서 놀랐다... 🤩
💡 배열 type1, type2, type3에 1, 2, 3번 수포자들이 찍는 방식을 담았고, ArrayList를 만들어 문제 수 (
answers.length
)만큼 담아 주었다 i를 각각 찍기 타입의 길이만큼 나눈 나머지로 type 배열들의 인덱스를 나타내 줄 수 있으며 문제 수 만큼 찍기 타입을 반복해 각각의 ArrayList에 넣어 주었다
💡 수포자 1, 2, 3들이 찍은 것과 정답이 들어 있는 배열의 원소가 같다면 count 배열의 원소들에 +1을 해 준다
💡 반복문을 통해 제일 많이 맞힌 count 값과 제일 많이 맞힌 수포자의 번호를 저장해 주게 되는데, 이때 만약 제일 많이 맞힌 count 값을 가진 수포자가 또 있다면
num
에 +1을 해 준다 (num
은answer
배열의 사이즈를 결정하기 위한 것이며 초기에는 1로 초기화되어 있다)
💡 마지막 반복문으로
answer
에max
값과 같은count[i]
값을 넣어 주게 된다 이런 방식으로 한 이유는 자동으로 오름차순으로 번호가 들어가게 되며 또,max
값이 2개 이상 있는 경우를 생각해서index
를 통해 인덱스를 조절하며 answer에 수포자 번호로 넣어 주었다 ❕