https://school.programmers.co.kr/learn/courses/30/lessons/42840
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int first = 0, second = 0, third = 0;
for(int i = 0; i < answers.length; i++){
int cycle = i % 5;
switch (cycle){
case 0:
if(answers[i] == 1){
first++;
}
break;
case 1:
if(answers[i] == 2){
first++;
}
break;
case 2:
if(answers[i] == 3){
first++;
}
break;
case 3:
if(answers[i] == 4){
first++;
}
break;
case 4:
if(answers[i] == 5){
first++;
}
break;
}
}
for(int i = 0; i < answers.length; i++){
int cycle = i % 8;
if(cycle % 2 == 0){
if(answers[i] == 2){
second++;
}
}else{
switch (cycle) {
case 1:
if (answers[i] == 1) {
second++;
}
break;
case 3:
if (answers[i] == 3) {
second++;
}
break;
case 5:
if (answers[i] == 4) {
second++;
}
break;
case 7:
if (answers[i] == 5) {
second++;
}
break;
}
}
}
for(int i = 0; i < answers.length; i++){
int cycle = i % 10;
switch (cycle){
case 0:
case 1:
if(answers[i] == 3){
third++;
}
break;
case 2:
case 3:
if(answers[i] == 1){
third++;
}
break;
case 4:
case 5:
if(answers[i] == 2){
third++;
}
break;
case 6:
case 7:
if(answers[i] == 4){
third++;
}
break;
case 8:
case 9:
if(answers[i] == 5){
third++;
}
break;
}
}
ArrayList<Integer> arr = new ArrayList<>();
int max = Math.max(first, second);
max = Math.max(max, third);
if(first == max) arr.add(1);
if(second == max) arr.add(2);
if(third == max) arr.add(3);
Collections.sort(arr);
int[] answer = new int[arr.size()];
for(int i = 0 ; i < arr.size(); i++){
answer[i] = arr.get(i);
}
return answer;
}
}
다른 분들의 해답을 보면 2차원 배열을 만드는 등 다양한 방법이 있겠지만, switch문을 조금 사용하면 코드는 길어질지 몰라도 더욱 직관적이고 효율적이라고 판단했다.
코드에서 중요했던 포인트는 int max를 구하기 위해 first,second를 먼저 비교하고 거기서 나온 max값을 다시 third와 비교하는 방식! 고등학교 수학 시간에 배웠겠지만 사용하면 효율적이다!
'문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 네트워크(JAVA) (0) | 2024.05.04 |
---|---|
[프로그래머스] 게임 맵 최단거리(JAVA) (0) | 2024.05.04 |
[프로그래머스] H-Index(JAVA) (1) | 2024.04.28 |
[프로그래머스] 가장 큰 수(JAVA) (0) | 2024.04.28 |
[프로그래머스] k번째 수(JAVA) (1) | 2024.04.26 |