문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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] |
생각해야 했던 점은 수포자들이 찍을 배열과 문제 정답이 들은 배열 answer의 길이를 맞춰야 한다는 점과
마지막 배열을 리턴할 때 크기를 정할 수 없으니 이걸 처리할 방식 정도? 였다!
처음에는 각 수포자들의 배열의 최소공배수를 구하여 그만큼씩 반복을 한 다음 문제 정답 배열 길이만큼 자르는 것이었다!
어라? 근데 이거 너무 낭비가 심하다고 생각이 들었다!
그래서 생각해낸 건 나머지 계산방법!
i가 0부터 시작할 때 이것을 각자의 수포자 배열의 길이로 나머지 계산을 해주면 된다! 이것을 정답 배열의 값과 비교해
각각의 위치의 score배열을 증가시켜주고 score 배열에서 Math.max로 최댓값을 구해준다
그 후 정답을 담을 배열을 처리해야 한다 하지만 가장 많은 문제를 맞힌 사람의 크기는 가변적이기 때문에
배열이 아니라 list로 처리해준 다음 다시 배열로 바꿔 리턴하면 끗!!!
문제풀이
import java.util.ArrayList;
import java.util.List;
public class PRO_CT_1 {
public static int[] solution(int[] answers) {
int[] a ={1,2,3,4,5};
int[] b= {2,1,2,3,2,4,2,5};
int[] c= {3,3,1,1,2,2,4,4,5,5};
int[] score = {0,0,0};
for(int i=0;i<answers.length;i++){
if(answers[i]==a[i%a.length]) score[0]++;
if(answers[i]==b[i%b.length]) score[1]++;
if(answers[i]==c[i%c.length]) score[2]++;
}
int max = Math.max(score[0],Math.max(score[1],score[2]));//3개의 값중 최대 구하기
List<Integer> result = new ArrayList<>();
for(int i=0;i<score.length;i++){
if(score[i]==max){ //스코어의 값이 최대값과 같다면
result.add(i+1); //리스트에 추가! ( 인덱스가 0부터 시작하기때문에 1을 더해줌)
}
}
int[] arr= new int[result.size()]; //배열로 리턴해야하기에 다시 리스트 -> 배열
for(int i=0;i<arr.length;i++){
arr[i]=result.get(i);
}
return arr;
}
public static void main(String[] args) {
int[] answer = {1,3,2,4,2};
System.out.println(solution(answer));
}
}
통과!
'알고리즘🤮 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL1: 크레인 인형뽑기 게임 (0) | 2022.12.21 |
---|---|
[JAVA]프로그래머스 LEVEL1: 체육복 (0) | 2022.12.20 |
[JAVA]프로그래머스 LEVEL1: [1차] 다트게임 (1) | 2022.12.19 |
[JAVA]프로그래머스 LEVEL1: 실패율 (0) | 2022.12.17 |
[JAVA]프로그래머스 LEVEL1: 콜라문제 (0) | 2022.12.15 |