문제: https://school.programmers.co.kr/learn/courses/30/lessons/42889
1. 코드
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
double[][] fail = new double[N][2];
int temp = stages.length;
for(int i = 0; i < N; i++) {
fail[i][1] = (double)(i + 1);
int cnt = 0;
for(int j = 0; j < stages.length; j++) {
if((i + 1) == stages[j]) {
cnt++;
}
}
if(temp > 0)
fail[i][0] = (double)cnt / temp;
else
fail[i][0] = 0;
temp -= cnt;
}
Arrays.sort(fail, new Comparator<double[]>(){
@Override
public int compare(double[] f1, double[] f2) {
if(f1[0] > f2[0])
return -1;
else if(f1[0] == f2[0])
return 0;
else
return 1;
}
});
for(int i = 0; i < N; i++)
answer[i] = (int) fail[i][1];
return answer;
}
}
2. 설명
int[] answer = new int[N];
double[][] fail = new double[N][2];
int temp = stages.length;
answer에는 정답을 fail에는 실패율과 스테이지 번호를 temp는 해당 스테이지에 도전하는 참가자들의 수이다.
for(int i = 0; i < N; i++) {
fail[i][1] = (double)(i + 1);
int cnt = 0;
for(int j = 0; j < stages.length; j++) {
if((i + 1) == stages[j]) {
cnt++;
}
}
if(temp > 0)
fail[i][0] = (double)cnt / temp;
else
fail[i][0] = 0;
temp -= cnt;
}
먼저 fail[i][1]에 스테이지 번호를 저장합니다. cnt는 해당 스테이지에서 실패한 사람들의 수입니다. 반복문을 통해서 실패한 스테이지에 남아있는 사람의 수를 측정합니다.
그리고 만약 현재 스테이지에 도전자가 더 이상 존재하지 않으면 실패율을 0으로 아니라면 (실패한 참가자 / 스테이지에 도달한 참가자)로 실패율을 저장합니다. 이러한 이유는 총 4 스테이지가 존재한다고 했을 때 1 스테이지에 모두가 남아있는 경우도 있기 때문에 n / 0이 되는 상황이 되어 오류를 방지하기 위함입니다.
마지막으로 해당 스테이지에 남아있는 참가자만큼 다음 단계 스테이지 참가자 수에 제외시킵니다.
Arrays.sort(fail, new Comparator<double[]>(){
@Override
public int compare(double[] f1, double[] f2) {
if(f1[0] > f2[0])
return -1;
else if(f1[0] == f2[0])
return 0;
else
return 1;
}
});
실패율을 기준으로 내림차순으로 정렬합니다.
for(int i = 0; i < N; i++)
answer[i] = (int) fail[i][1];
내림차순된 순서로 스테이지 번호를 answer 차례로 저장하면 문제는 해결됩니다.
3. 정리
- 문제 잘 이해하기
- 2차원 배열 정렬 방법 숙지
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 136798번: 기사단원의 무기 [Java] (0) | 2023.08.01 |
---|---|
프로그래머스 - 161989번: 덧칠하기 [Java] (0) | 2023.07.31 |
프로그래머스 - 12921번: 소수 찾기 [Java] (0) | 2023.07.29 |
프로그래머스 - 12977번: 소수 만들기 [Java] (0) | 2023.07.28 |
프로그래머스 - 42840번: 모의고사 [Java] (0) | 2023.07.27 |