https://programmers.co.kr/learn/courses/30/lessons/42840
문제 분석
- 학생 1,2,3번이 수학을 찍는 방식의 규칙을 구한다.
- 반복되는 숫자들을 각각 배열에 담아 처리한다.
- mod를 사용하여 반복되는 정답을 처리한다.
- 가장 높은 점수를 받은 사람을 반환하고, 여러 명인 경우 오름차순으로 정렬한다.
문제 풀이
1. person1,2,3 배열을 통해 각각 반복하는 방식을 담는다.
2. while문을 통해 각각 반복되는 경우를 계산한다.
3. mod(idx%반복되는 숫자 길이)를 이용하여 정답을 맞는지 처리한다.
4. Math.max를 사용하여 가장 큰 값을 구한다.
5. 가장 높은 점수(cnt에 담김)를 받은 학생을 list에 추가한다.
6. for문을 통해 가장 높은 사람을 구하고, 여러 명인 경우 오름차순 정렬한다.
import java.util.*;
class Solution {
int[] answer;
public int[] solution(int[] answers) {
int[] person1 = new int[]{1, 2, 3, 4, 5};
int[] person2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
int[] person3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int[] cnt = new int[3];
int idx = 0;
while(true){
if(idx == answers.length){
break;
}
if(person1[idx%5]==answers[idx]){
cnt[0]++;
}
if(person2[idx%8]==answers[idx]){
cnt[1]++;
}
if(person3[idx%10]==answers[idx]){
cnt[2]++;
}
idx++;
}
int max = Math.max(Math.max(cnt[0], cnt[1]), cnt[2]);
ArrayList<Integer> list = new ArrayList<>();
if(cnt[0]==max){
list.add(1);
}
if(cnt[1]==max){
list.add(2);
}
if(cnt[2]==max){
list.add(3);
}
answer = new int[list.size()];
for(int i=0;i<list.size();i++){
answer[i] = list.get(i);
}
return answer;
}
}
'Algorithm > programmers' 카테고리의 다른 글
programmers 완주하지 못한 선수 (0) | 2022.03.13 |
---|---|
programmers K번째수 (0) | 2022.03.13 |
programmers 체육복 (0) | 2022.03.13 |
programmers 폰켓몬 (0) | 2022.03.13 |
programmers 실패율 (0) | 2022.03.13 |