문제를 찍어 맞추는 세명의 학생들 중 주어진 문제를 얼마나 많이 맞추는지 확인하는 문제이다.
풀이 방법 및 단계는 이러하다.
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
ArrayList<Integer> answer = new ArrayList<>();
// 1번
int[] a = {1,2,3,4,5};
int[] b = {2,1,2,3,2,4,2,5};
int[] c = {3,3,1,1,2,2,4,4,5,5};
int[] score = {0,0,0};
// 2번
for(int i = 0; i < answers.length; i++){
if(a[i%5] == answers[i]) score[0]++;
if(b[i%8] == answers[i]) score[1]++;
if(c[i%10] == answers[i]) score[2]++;
}
// 3번
if((score[0] >= score[1] && score[0] >= score[2])){ // 1이 큰 것이 확정일 경우
answer.add(1);
}
if((score[1] >= score[0] && score[1] >= score[2])){ // 1이 큰 것이 확정일 경우
answer.add(2);
}
if((score[2] >= score[1] && score[2] >= score[0])){ // 1이 큰 것이 확정일 경우
answer.add(3);
}
// 4번
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
score 배열을 m개씩 쪼개서 쪼갠 요소들 중 가장 작은 크기의 값에 연산을 하는 문제이다.
문제를 푸는데 거치는 단계는 이러하다.
import java.util.*;
class Solution {
public int solution(int k, int m, int[] score) {
int answer = 0;
Arrays.sort(score);
for(int i = score.length; i >= m; i -= m){ // 상자 안의 가장 낮은 품질만 계산
answer += score[i-m] * m;
}
return answer;
}
}
사실 배열 크기를 벗어나는 문제 때문에 score.length-1 부터 시작해서 연산해서 풀었는데, 어차피 연산에서 score에 -m을 하면서 m까지만 반복하기 때문에 굳이 생각하지 않아도 될 문제였다.