문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 조건- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
입출력 예 #1
- 수포자 1은 모든 문제를 맞혔습니다.
- 수포자 2는 모든 문제를 틀렸습니다.
- 수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
- 모든 사람이 2문제씩을 맞췄습니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(int[] answers) {
int[] answer = {};
List<Integer> list = new ArrayList<Integer>();
int[] arr1 = {1,2,3,4,5};
int[] arr2 = {2,1,2,3,2,4,2,5};
int[] arr3 = {3,3,1,1,2,2,4,4,5,5,};
int[] cnt = new int[3];
for(int i = 0 ; i < answers.length ; i++){
if(answers[i] == arr1[i%arr1.length]) cnt[0]++;
if(answers[i] == arr2[i%arr2.length]) cnt[1]++;
if(answers[i] == arr3[i%arr3.length]) cnt[2]++;
}
int[] tmp = new int[cnt.length];
for(int i = 0 ; i < cnt.length; i++){
tmp[i] = cnt[i];
}
Arrays.sort(tmp);
for(int i = 0 ; i < cnt.length; i++){
if(cnt[i] == tmp[2]){
list.add(i + 1);
}
}
answer = new int[list.size()];
for(int i = 0 ; i < answer.length; i++){
answer[i] = list.get(i);
}
return answer;
}
}
○ 문제 풀이
배열 3개에 수포자 3인방의 답이 반복되는 부분을 넣어 배열을 생성했다.
그리고 항상 배열의 값을 비교할 때, 어떻게 코드를 짜야할지 고민을 많이 했는데 아래와 같이 짜니까 가독성도 좋고 코드 짜기도 좋은 거 같다. 앞으로 배열 값을 비교할 일이 있으면 이렇게 코드를 짜면 좋을 듯하다.
수포자 3인방이 맞은 답의 개수를 cnt 배열에 넣어주고 cnt와 똑같은 배열을 하나 만들어 주었다. 왜냐하면 정렬을 해서 가장 높은 점수를 알아내기 위함이다.
정렬을 해서 알아낸 가장 높은 점수와 같은 값이 cnt에 있는지 확인해서 list에 넣어준다. 그러면 가장 높은 점수가 1개만 있으면 list에는 1개의 값만 있을 것이고, 그 이상이라면 그만큼 값이 들어있을 것이다.
이제 반환해줄 answer 배열을 값이 들어있는 list의 크기만큼 생성을 해주고 list의 값을 answer에 넣어주면 3인방 중 가장 높은 점수를 받은 사람이 누군지 알 수 있게 된다.
'문제풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스. 체육복(JAVA) (0) | 2022.05.13 |
---|---|
프로그래머스. 크레인 인형뽑기 게임(JAVA)(스택) (0) | 2022.05.02 |
프로그래머스. 기능개발(JAVA)(스택/큐) (0) | 2022.04.19 |
프로그래머스. 더 맵게 (JAVA)(Level 2) (0) | 2022.04.15 |
프로그래머스 [카카오 인턴] 키패드 누르기 (Level 1)(JAVA) (0) | 2022.04.13 |