728x90
반응형
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
2. 풀이
- 실패율로 내림차순을 해야했고, 실패율이 같을 경우 스테이지가 낮은 것 부터 내림차순을 해야했다.
- 실패율이 같을 때, 내림차순(sort)을 하기 위해 class 를 생성후 comparable을 사용하여 list에 넣었다.
- 이중 for문으로 실패 인원수를 먼저 찾았다
- 만약 실패 인원수가 없다면 continue
- 있다면 스테이지(idx), 실패율(rate)를 리스트에 결과값을 얻을 수 있었다.
3. 코드
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.*;
public class 실패율 {
@Test
public void correct() {
Assertions.assertArrayEquals(new int[]{3, 4, 2, 1, 5}, solution(5, new int[]{2, 1, 2, 6, 2, 4, 3, 3}));
}
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int member = stages.length;
List<Stage> list = new ArrayList<>();
for (int i = 1; i <= N; i++) {
int num = 0;
for (int j = 0; j < stages.length; j++) {
//실패 인원수 찾기
if (i == stages[j]) {
num++;
}
}
if (num == 0) {
list.add(new Stage(i, 0));
continue;
}
list.add(new Stage(i, (double) num / member)); //소수점계산
member -= num;
}
Collections.sort(list);
for (int i = 0; i < N; i++) {
answer[i] = list.get(i).idx;
}
return answer;
}
static class Stage implements Comparable<Stage> {
int idx;
double rate;
public Stage(int idx, double rate) {
this.idx = idx;
this.rate = rate;
}
@Override
public int compareTo(Stage o) {
//기본 return은 내림차순
//같은 실패율, 앞 스테이지부터 내림차순
if (this.rate == o.rate) {
return this.idx - o.idx;
}
return Double.compare(o.rate, this.rate);
}
}
}
반응형
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv3] 징검다리 건너기 (0) | 2024.04.23 |
---|---|
[프로그래머스 Lv2] [3차] 압축 (0) | 2024.04.21 |
[프로그래머스 Lv2] 카카오프렌즈 컬러링북(Java) (0) | 2024.03.04 |
[프로그래머스 Lv2] 문자열 압축(Java) (0) | 2024.03.04 |
[프로그래머스 Lv2] 더 맵게(Java) (0) | 2021.01.08 |