프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
1. 실패율을 내림차순으로 정렬한 배열1 , 스테이지순으로 정렬된 실패율 배열2 총 2개의 배열을 만든다.
2. 배열1과 배열2를 비교하면서 배열1 [ 0 ] 부터 시작하여 배열1을 기준으로 배열1 [ i ] 와 배열2 [ j ] 가 일치하면 answer [ ] = j 를 한다.
3. 2과정을 거친 배열2 [ j ] 는 값을 -1로 바꿔준다.
4. 주의점으로는 실패율을 계산할때 분모가 0일 경우 ( 스테이지 도달자가 없는 경우 ) 계산을 하지않고 0을 넣어야 한다. 계산을 하게되면 컴파일에러나 NaN 이 발생 ( 아래 코드로 테스트를 해보자 )
int N = 5;
int[] stages = {1, 1, 1, 2, 3, 4};
5. 위에서 설명한 과정을 입출력 예제1번으로 시뮬레이션
int N = 5;
int[] stages = {2, 1, 2, 6, 2, 4, 3, 3};





나의풀이 ( 코드 )
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int[] stg = new int[N];
double[] fail1 = new double[N];
double[] fail2 = new double[N];
int sum = stages.length;
for (int i = 0; i < stages.length; i++) {
if (stages[i] > N) { // 이 부분이 분모 0일 경우 계산 X
continue;
}
stg[stages[i] - 1]++;
}
for (int i = 0; i < stg.length; i++) {
if (sum == 0) {
continue;
}
fail1[i] = (double) stg[i] / sum;
fail2[i] = (double) stg[i] / sum;
sum -= stg[i];
}
Arrays.sort(fail1);
N = 0;
for (int i = fail1.length - 1; i >= 0; i--) {
for (int j = 0; j < fail1.length; j++) {
if (fail1[i] == fail2[j]) {
fail2[j] = -1;
answer[N++] = j + 1;
}
}
}
return answer;
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/JAVA 자바] 옹알이 (2) (0) | 2024.04.15 |
|---|---|
| [프로그래머스/JAVA 자바] 옹알이 (1) (0) | 2024.04.15 |
| [프로그래머스/JAVA 자바] [1차] 비밀지도 (0) | 2024.04.15 |
| [프로그래머스/JAVA 자바] 숫자 문자열과 영단어 (0) | 2024.04.14 |
| [프로그래머스/JAVA 자바] 예산 (0) | 2024.04.14 |