문제
https://programmers.co.kr/learn/courses/30/lessons/42840
class Solution {
public int[] solution(int[] answers) {
int[] answer = {};
Solver sovler = new Solver();
int[] res = new int[3];
for (int i = 0; i < answers.length; i++) {
int[] solve = sovler.solve(answers[i]);
res[0] += solve[0];
res[1] += solve[1];
res[2] += solve[2];
}
Score score1 = new Score(1, res[0]);
Score score2 = new Score(2, res[1]);
Score score3 = new Score(3, res[2]);
// 우선순위 큐를 이용해 값이 큰 순서대로 sort
PriorityQueue<Score> pq = new PriorityQueue<>();
pq.add(score1);
pq.add(score2);
pq.add(score3);
// 최대값이 0일 경우 전부 맞추지 못했다는 뜻이므로 1,2,3 리턴
int max = pq.peek().score;
if (max == 0) {
answer = new int[]{1, 2, 3};
return answer;
}
// 우선순위 큐에서 max값과 일치하는 Score를 꺼내 no를 ans에 add
List<Integer> ans = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Score score = pq.poll();
if (score.score == max) {
ans.add(score.no);
}
}
// no를 오름차순으로 정렬
ans.sort(Comparator.naturalOrder());
answer = new int[ans.size()];
for (int i = 0; i < ans.size(); i++) {
answer[i] = ans.get(i);
}
return answer;
}
private class Solver {
int[] p1 = {1, 2, 3, 4, 5};
int[] p2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] p3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int idxP1 = 0;
int idxP2 = 0;
int idxP3 = 0;
public int[] solve(int answer) {
int[] res = new int[3];
if (p1[idxP1] == answer) {
res[0] = 1;
}
if (p2[idxP2] == answer) {
res[1] = 1;
}
if (p3[idxP3] == answer) {
res[2] = 1;
}
idxP1++;
if (idxP1 >= p1.length) {
idxP1 = 0;
}
idxP2++;
if (idxP2 >= p2.length) {
idxP2 = 0;
}
idxP3++;
if (idxP3 >= p3.length) {
idxP3 = 0;
}
return res;
}
}
private class Score implements Comparable<Score> {
int no;
int score;
public Score(int no, int score) {
this.no = no;
this.score = score;
}
@Override
public int compareTo(Score o) {
return this.score <= o.score ? 1 : -1;
}
}
'Algorithms' 카테고리의 다른 글
[Codility] PermMissingElem (0) | 2022.02.28 |
---|---|
[Codility] OddOccurrencesInArray (0) | 2022.02.26 |
[Codility] CyclicRotation (0) | 2022.02.24 |
[Codility] BinaryGap (0) | 2022.02.22 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.02.13 |