[Programmers] : 실패율 - Java
- 💾 알고리즘/프로그래머스
- 2021. 12. 17. 17:13
🔗 문제
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
💻 코드
package org.kyhslam.programmers;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class day_1217_01 {
public static boolean[] visited;
public static class Rate {
private int idx;
private double rate;
public Rate(int idx, double rate) {
this.idx = idx;
this.rate = rate;
}
}
public static class RateCompare implements Comparator<Rate> {
@Override
public int compare(Rate o1, Rate o2) {
//return o1.rate > o2.rate ? -1 : 1;
// 실패율이 같을 때
if(o1.rate == o2.rate)
{
return o1.idx < o2.idx ? -1:1;
}
// 실패율이 다를 때 내림차순 정렬
else if(o1.rate> o2.rate)
{
return -1; // -1 : 오름차순 ||| 1 : 내림차순
}
else
{
return 1;
}
}
}
public static void main(String[] args) {
int N = 5;
int[] stages = {2, 1, 2, 6, 2, 4, 3, 3};
//int[] stages = {4,4,4,4,4};
// [4,1,2,3]
int[] result = solution(N, stages);
System.out.println("--- result = " + Arrays.toString(result));
}
public static int[] solution(int N, int[] stages) {
int[] answer = new int[N];
visited = new boolean[stages.length];
ArrayList<Rate> list = new ArrayList<>();
for (int i = 1; i <= N; i++) {
int fail = 0;
Integer all = 0;
for(int j=0; j < stages.length; j++) {
if(visited[j] == false) {
if(i >= stages[j]) {
visited[j] = true;
fail++;
}
all++;
}
}
Rate r = new Rate(i, fail/ all.doubleValue());
list.add(r);
}
Collections.sort(list, new RateCompare());
//System.out.println("list = " + list);
list.forEach(c -> System.out.println(c.idx + " : " + c.rate));
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).idx;
}
return answer;
}
}
다른방법
import jdk.swing.interop.SwingInterOpUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class day_1217_02 {
public static class Rate {
private int idx;
private double rate;
public Rate(int idx, double rate) {
this.idx = idx;
this.rate = rate;
}
}
public static class RateCompare implements Comparator<Rate> {
@Override
public int compare(Rate o1, Rate o2) {
//return o1.rate > o2.rate ? -1 : 1;
// 실패율이 같을 때
if(o1.rate == o2.rate)
{
return o1.idx < o2.idx ? -1:1;
}
// 실패율이 다를 때 내림차순 정렬
else if(o1.rate> o2.rate)
{
return -1; // -1 : 오름차순 ||| 1 : 내림차순
}
else
{
return 1;
}
}
}
public static void main(String[] args) {
int N = 5;
int[] stages = {2, 1, 2, 6, 2, 4, 3, 3};
//int[] stages = {4,4,4,4,4};
// [4,1,2,3]
int[] result = solution(N, stages);
System.out.println("Arrays.toString(result) = " + Arrays.toString(result));
}
public static int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int[] user_cnt = new int[N+2];
int[] user_total_cnt = new int[N+1];
for (int i = 0; i < stages.length; i++) {
user_cnt[stages[i]]++;
}
System.out.println(Arrays.toString(user_cnt));
user_total_cnt[N] = user_cnt[N] + user_cnt[N+1];
// System.out.println("Arrays.toString(user_total_cnt) = " + Arrays.toString(user_total_cnt));
for (int i = N - 1; i >= 1; i--) {
System.out.println(i + "=> " + user_cnt[i] + " + " + user_total_cnt[i + 1]);
user_total_cnt[i] = user_cnt[i] + user_total_cnt[i + 1];
}
ArrayList<Rate> list = new ArrayList<>();
for (int i = 1; i <= N; i++) {
if (user_total_cnt[i] == 0) {
list.add(new Rate(i, 0));
continue;
}
double rate = (double) user_cnt[i] / user_total_cnt[i];
list.add(new Rate(i, rate));
}
Collections.sort(list, new RateCompare());
System.out.println("list = " + list);
list.forEach(o -> System.out.println(o.idx + " :: " + o.rate));
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).idx;
}
return answer;
}
}
'💾 알고리즘 > 프로그래머스' 카테고리의 다른 글
[Programmers] : 크레인 인형 뽑기 - Java (0) | 2021.12.30 |
---|---|
[Programmers] : 음양 더하기- Java (0) | 2021.12.29 |
[Programmers] : 없는 숫자 더하기 > Java (0) | 2021.12.14 |
[Programmers] : 2020 카카오인턴 > 키패드 누르기 (0) | 2021.12.04 |
[Programmers] : 2021 Dev-Matching > 로또의 최고 순위와 최저 순위 (0) | 2021.11.20 |