문제풀이/코딩테스트
프로그래머스 모의고사 [Java]
gyungmean
2022. 2. 24. 14:03
문제출처
https://programmers.co.kr/learn/courses/30/lessons/42840
쉬운 문제라고 생각했는데 테스트 케이스 하나가 계속 통과가 안돼서 조금 애 먹었던 문제
수포자 1, 2, 3은 모두 동일한 패턴으로 정답을 작성하고 있으므로 각각의 패턴을 배열로 만든다.
정답과 비교하며 점수를 계산
점수를 비교하여 최고값을 가진 학생들을 묶어서 배열로 반환
접근 방법은 이렇게 했고 정답코드는 아래처럼 작성했다.
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] p1 = {1, 2, 3, 4, 5};
int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int[] scores = {0, 0, 0};
for(int i = 0; i < answers.length; i++){
if(answers[i] == p1[i % 5]){ scores[0]++; }
if(answers[i] == p2[i % 8]){ scores[1]++; }
if(answers[i] == p3[i % 10]){ scores[2]++; }
}
int[] tmp = {scores[0], scores[1], scores[2]};
Arrays.sort(tmp);
List<Integer> answer_list = new ArrayList<>();
for(int i = 0; i < 3; i++){
if(scores[i] == tmp[2]){ answer_list.add(i + 1); }
}
int[] answer = new int[answer_list.size()];
for(int i = 0; i < answer_list.size(); i++){
answer[i] = answer_list.get(i);
}
return answer;
}
}
프로그래머스는 테스트 값을 제공하지 않아서 정확하게 알 수는 없지만 우선 나의 경우에 하나 통과하지 못 했던 케이스는 내가 연산자를 오타내서 그런거 였다;;
이런 문제 풀 때는 내가 빠트린 경우의 수가 있는지 꼼꼼하게 확인할 필요가 있는듯하다.