문제 설명
풀이 : Success
소스 코드
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] s = new int[3];
int[] s1 = {1,2,3,4,5};
int[] s2 = {2,1,2,3,2,4,2,5};
int[] s3 = {3,3,1,1,2,2,4,4,5,5};
for (int i = 0; i < answers.length; i++) {
if(answers[i] == s1[i%5]){
s[0]++;
}
if(answers[i] == s2[i%8]){
s[1]++;
}
if(answers[i] == s3[i%10]){
s[2]++;
}
}
int max = Arrays.stream(s).max().getAsInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < s.length; i++) {
if(s[i] == max){
list.add(i+1);
}
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
풀이 회고
1번 수포자는 1, 2, 3, 4, 5 총 5개의 숫자를 반복해서 찍으며, 2번 수포자는 2, 1, 2, 3, 2, 4, 2, 5 총 8개의 숫자를 반복해서 찍으며, 3번 수포자는 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 총 10개의 숫자를 반복해서 찍는다. 이러한 규칙성을 활용하기 위해 각각의 수포자별로 한 주기의 숫자를 담은 정수형 배열(s1~s3)을 선언해주었다.
입력받는 매개변수 정수형 배열 answers에는 문제의 정답이 담겨있는데, 이를 순회하여 수포자별로 정답을 맞춘 개수를 카운팅시켰다. 카운팅시킨 값은 1번~3번 수포자 순으로 정수형 배열 s 인덱스 0~2에 각각 저장시켰다.
문제에서 요구하는 것은 가장 문제를 많이 맞힌 수포자를 찾는 것이므로 stream을 활용하여 정수형 배열 s에서 가장 큰 값을 얻어왔다. 이때 가장 문제를 많이 맞힌 수포자가 여러명일 수도 있으므로 별도 ArrayList 자료구조에 가장 큰 값을 가지고 있는 수포자 Number(1~3)를 순차적으로 add 시켜주었다. 최종 결과값의 타입은 정수형 배열이므로 다시 stream을 활용하여 정수형(int) 배열로 변환시켜주었다.
참고자료
- https://programmers.co.kr/learn/courses/30/lessons/42840
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] k진수에서 소수 개수 구하기 - Java (0) | 2022.02.18 |
---|---|
[프로그래머스] 신고 결과 받기 - Java (0) | 2022.02.16 |
[프로그래머스] K번째 수 - Java (0) | 2022.01.19 |
[프로그래머스] 이상한 문자 만들기 - Java (0) | 2022.01.19 |
[프로그래머스] 크레인 인형뽑기 게임 - Java (0) | 2022.01.19 |