문제 출처 - Programmers
문제는 여기
[풀이]
1. 2차원 배열에 각 사람들의 답을 찍는 방식을 담아준다.
2. 정답과 2차원 배열에 담겨있는 각 사람들이 찍는 값이 일치하는 치 비교 후 일치하면 점수를 증가시켜준다.
3. 모든 문제에 맞춰서 2를 반복한다.
4. 점수 중에서 최고점을 구한다.
5. 최고점이 몇 개가 될지 모르니까 ArrayList를 사용해 최고값일 경우 다 담아준다.
6. list의 값들을 배열에 담아준다.
7. 결과를 출력한다.
[접근]
1. 사람들마다 문제를 찍는 방식이 다른데 이를 배열에 넣어서 정답과 비교 처리하면 되겠다고 생각하였다.
[코드]
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[][] check = {{1, 2, 3, 4, 5}, {2, 1, 2, 3, 2, 4, 2, 5}, {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}};
int[] score = new int[3];
// 문제를 맞출때마다 score 증가
for (int i = 0; i < answers.length; i++) {
// i % check[0].length 를 통해 문제 수가 더 많을 경우도 반복 처리 가능
if (answers[i] == check[0][i % check[0].length]) {
score[0]++;
}
if (answers[i] == check[1][i % check[1].length]) {
score[1]++;
}
if (answers[i] == check[2][i % check[2].length]) {
score[2]++;
}
}
// 최고값을 구하기
int max = Math.max(score[0], Math.max(score[1], score[2]));
// 최고값이 몇개가 될 지 몰라서 리스트를 만들어 넣어준 후 처리
ArrayList<Integer> list = new ArrayList<>();
// 3명이므로 3번 반복
for (int i = 0; i < 3; i++) {
// 최고점과 같은 경우에 리스트에 추가
if (score[i] == max)
list.add(i);
}
// 정답 출력
int[] answer = new int[list.size()];
int idx = 0;
for (int a : list) {
// 0,1,2로 들어가기 때문에 1증가
answer[idx++] = a + 1;
}
return answer;
}
}
'문제 풀이 > Programmers' 카테고리의 다른 글
[프로그래머스] 두 정수 사이의 합 (JAVA) (0) | 2022.03.28 |
---|---|
[프로그래머스] 체육복 (JAVA) (0) | 2022.03.27 |
[프로그래머스] 짝지어 제거하기 (JAVA) (0) | 2022.03.23 |
[프로그래머스] 기능개발 (JAVA) (0) | 2022.03.22 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (JAVA) (0) | 2022.03.21 |