https://school.programmers.co.kr/learn/courses/30/lessons/42889#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
LinkedHashMap<Integer, Double> hashMap = new LinkedHashMap<>();
int over;
int same;
for (int i = 0; i < N; i++) {
over = 0;
same = 0;
for (int j = 0; j < stages.length; j++) {
if (stages[j] > i) {
over++;
}
if (stages[j] == (i + 1)) {
same++;
}
if (over == 0) {
hashMap.put(i + 1, 0.0);
} else {
hashMap.put(i + 1, same / (double) over);
}
}
}
System.out.println(hashMap.entrySet());
hashMap = hashMap.entrySet()
.stream()
.sorted(Map.Entry.<Integer, Double>comparingByValue().reversed())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));
int index = 0;
for (int key : hashMap.keySet()) {
answer[index++] = key;
}
return answer;
}
📍포인트
1. 순환해서 해당 스테이지보다 값이 크면 변수로 선언, 그 스테이지와 같은 값도 변수로 선언해서 실패율들을 구함
2. 실패율 기준으로 인덱스 내림차순 정렬
📍삽질
1. 실패율 기준으로 인덱스 내림차순 정렬하는데 인덱스를 어떻게 처리할지 고민하다가 LinkedHashMap 도입.
2. 분모값이 0이면 NaN이 떠버리는 상황이 발생 (반례). if문으로 한번 걸러주는 작업 필요.
3. 정렬을 위한 stream() 사용
'코딩테스트' 카테고리의 다른 글
[코딩테스트(Java)] 프로그래머스 50048 베스트앨범 (0) | 2025.03.12 |
---|---|
[코딩테스트(Java)] 프로그래머스 92334 신고 결과 받기 (1) | 2025.03.11 |
[코딩테스트(Java)] 프로그래머스 72410 신규 아이디 추천 (0) | 2025.03.09 |
[코딩테스트(Java)] 프로그래머스 17682 다트 게임 (0) | 2025.03.07 |
[코딩테스트(Java)] 프로그래머스 17681 비밀지도 (0) | 2025.03.06 |