Algorithm/programmers
programmers 모의고사
wow
2022. 3. 13. 21:18
https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
문제 분석
- 학생 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;
}
}