깃허브:
https://github.com/MSIQOC/Programmers/blob/main/%EC%8B%A4%ED%8C%A8%EC%9C%A8.java
https://programmers.co.kr/learn/courses/30/lessons/42889
먼저 stages를 오름차순으로 정렬하면 각 스테이지마다 도전자 수를 알 수 있다. 포인터 p를 두고 각 스테이지마다 도전자 수를 구해서 확률을 구하고 해쉬맵에 스테이지를 키로 하고 확률을 value로 해서 넣는다. 그러고 나서 hashmap을 value 기준 내림차순, key 기준 오름차순으로 정렬하면 된다.
https://softworking.tistory.com/84
value를 기준으로 내림차순 정렬하고 key를 기준으로 오름차순 정렬이 되도록 override 해주는 방법은 잘 모르겠어서 블로그를 참고했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
import java.util.*;
import java.util.Map.*;
class Solution {
public int[] solution(int n, int[] stages) {
HashMap<Integer, Double> hm = new HashMap<>();
//1. stages를 오름차순으로 정렬시키기
Arrays.sort(stages);
//2. 이중에서 도전자 수 구하기.
int p = 0;
int num = stages.length;
for(int i=1; i<=n; ++i){
int howmany = 0;
while(p < stages.length && stages[p] <= i){
++howmany;
++p;
}
double nn = (double) howmany/num;
hm.put(i, nn);
num -= howmany;
}
// 순서 유지를 위해 링크드 리스트
List<Map.Entry<Integer, Double>> list = new LinkedList<>(hm.entrySet());
// value기준 내림차순, 인덱스 기준 오름차순 정렬
Collections.sort(list, new Comparator<Map.Entry<Integer, Double>>() {
@Override
public int compare(Entry<Integer, Double> o1, Entry<Integer, Double> o2) {
if (o2.getValue() - o1.getValue() > 0) {
return 1;
}
if (o2.getValue() - o1.getValue() < 0) {
return -1;
}
return o1.getKey() - o2.getKey();
}
});
int[] answer = new int[n];
int i = 0;
// 배열에 순서대로 인덱스 담기
for (Iterator<Map.Entry<Integer, Double>> iter = list.iterator(); iter.hasNext();) {
Map.Entry<Integer, Double> entry = iter.next();
answer[i++] = entry.getKey();
}
return answer;
}
}
|
cs |
'프로그래머스 풀이' 카테고리의 다른 글
프로그래머스 2단계 - 조이스틱 (Python) (0) | 2021.11.14 |
---|---|
프로그래머스 2단계 - 행렬 테두리 회전하기(Python) (0) | 2021.09.19 |
프로그래머스 3단계 - 가장 먼 노드 (Python, Java) (0) | 2021.08.31 |
프로그래머스 2단계 - 피보나치 수(Python) (0) | 2021.08.09 |
프로그래머스 2단계 - 카펫(Java) (0) | 2021.08.09 |