문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42889

제한 사항

입출력 예

풀이
import java.util.HashMap;
import java.util.stream.IntStream;
class Solution {
public int[] solution(int N, int[] stages) {
int[] stageSt = new int[N + 1];
int[] stageCh = new int[N + 1];
HashMap<Integer, Float> failure = new HashMap<>();
for (int stage : stages) stageSt[--stage]++;
for (int i = 0; i < N; i++) {
for (int j = i; j < N + 1; j++) stageCh[i] += stageSt[j];
failure.put(i + 1, (float)stageSt[i] / stageCh[i]);
}
return IntStream.range(1, N + 1)
.mapToObj(Integer::valueOf)
.sorted((i, j) -> (int)((failure.get(j) - failure.get(i)) / Math.abs(failure.get(j) - failure.get(i))))
.mapToInt(i -> i).toArray();
}
}
후기
조금 생각해봐야하는 문제였다. 실패율을 구하는 것까지는 쉬우나 정렬을 어떻게 할지가 관건이다. 나는 스트림을 이용해서 정렬을 했지만 이렇게 하면 실행 시간이 너무 오래걸린다. 거기다가 박싱과 언박싱을 반복하면서 더 효율이 떨어진다. 정렬 부분만 다시 생각해볼 필요가 있다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] 두 원 사이의 정수 쌍 (0) | 2023.07.17 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 체육복 (0) | 2023.07.16 |
| [프로그래머스][JAVA][Lv. 1] 3진법 뒤집기 (0) | 2023.07.15 |
| [프로그래머스][JAVA][Lv. 1] 키패드 누르기 (0) | 2023.07.14 |
| [프로그래머스][JAVA][Lv. 0] 옹알이 (1) (0) | 2023.07.12 |