💡 문제
💬 입출력 예시
📌 풀이(소스코드)
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
List<Integer> answer = new ArrayList<>();
int[] counts = new int[3];
int[] one = {1,2,3,4,5};
int[] two = {2,1,2,3,2,4,2,5};
int[] three = {3,3,1,1,2,2,4,4,5,5};
for (int i = 0; i < answers.length; i++) {
if (answers[i] == one[i % one.length]) {
counts[0]++;
}
if (answers[i] == two[i % two.length]) {
counts[1]++;
}
if (answers[i] == three[i % three.length]) {
counts[2]++;
}
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < counts.length; i++) {
max = Math.max(max, counts[i]);
}
for (int i = 0; i < counts.length; i++) {
if (counts[i] == max) {
answer.add(i+1);
}
}
return answer.stream().mapToInt(i -> i).toArray();
}
}
📄 해설
접근
- 수포자의 찍는 방식의 패턴을 파악하고, 이를 이용하면 된다.
- 채점 할 때, 찍는 패턴이 존재하므로, 나머지 연산을 통해 인덱스를 잘 계산해줘야함.
- 최댓값(가장 높은 점수)을 찾고, 최댓값인 수포자를 찾아서 반환해주면 된다.
과정
- 가장 많은 문제를 맞힌 사람은 한명일수도 있고 여러명일 수 있으므로,
List
로 answer
을 선언한다.
- 맞은 문제 개수를 저장할 배열
counts
를 선언하고, 1~3번 수포자의 찍는 방식의 패턴인 one
, two
, three
를 선언한다.
- 문제의 정답을 맞히면 각각의
counts
값을 증가시킨다. 이 때, 찍기 패턴 배열의 인덱스를 나머지 연산을 통해 잘 조절해야한다.
- 채점이 끝나면,
counts
배열에서 최댓값을 찾는다.
- 최댓값을 찾고나면,
counts
배열에서 최댓값인 인덱스 번호 + 1 을 answer
리스트에 추가한다.