문제: https://school.programmers.co.kr/learn/courses/30/lessons/42840
1. 코드
import java.util.*;
class Solution {
public ArrayList <Integer> solution(int[] answers) {
ArrayList <Integer> answer = new ArrayList<>();
int[][] p = {
{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];
int best = 0;
for(int i = 0; i < answers.length; i++) {
for(int j = 0; j < p.length; j++) {
if(p[j][i % p[j].length] == answers[i]) {
score[j]++;
best = Math.max(best, score[j]);
}
}
}
for(int i = 0; i < score.length; i++) {
if(score[i] == best)
answer.add(i + 1);
}
return answer;
}
}
2. 설명
int[][] p = {
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
};
수포자의 패턴을 가져와서 2차원 배열로 만들어줍니다.
int[] score = new int[3];
int best = 0;
for(int i = 0; i < answers.length; i++) {
for(int j = 0; j < p.length; j++) {
if(p[j][i % p[j].length] == answers[i]) {
score[j]++;
best = Math.max(best, score[j]);
}
}
}
score에는 수포자들의 점수를 저장합니다. 이중 반복문을 통해서 수포자가 선택한 답과 문제의 답이 같으면 해당 수포자의 점수를 증가시키고 best에는 수포자들 중 가장 높은 점수를 저장하는 것이기에 Math.max()를 활용하여 최고 점수를 저장해줍니다.
for(int i = 0; i < score.length; i++) {
if(score[i] == best)
answer.add(i + 1);
}
최고의 점수를 보유하고 있는 수포자들을 추가해주고 반환하면 문제는 해결됩니다.
3. 정리
- 수포자들의 패턴 배열로 저장
- % 연산자로 문제에 맞는 정답 선택
- 최고 점수를 가진 수포자들 선택
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 12921번: 소수 찾기 [Java] (0) | 2023.07.29 |
---|---|
프로그래머스 - 12977번: 소수 만들기 [Java] (0) | 2023.07.28 |
프로그래머스 - 159994번: 카드 뭉치 [Java] (0) | 2023.07.26 |
프로그래머스 - 135808번: 과일 장수 [Java] (0) | 2023.07.25 |
프로그래머스 - 1845번: 폰켓몬 [Java] (1) | 2023.07.24 |