일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 연결요소 자바
- java 파티
- spring mongoTemplate
- 익명 객체 @transactional
- ipfs singletone
- 백준 1504 java
- Spring ipfs
- java 1509
- 백준 특정한 최단 경로
- java 백준 1509
- 백준 2252 줄세우기
- mongodb lookup
- java 1238
- 전략 패턴이란
- nodejs rabbitmq
- kotiln const
- spring mongoTemplate switch
- 자바 백준 팩토리얼 개수
- javav 1676
- kotiln functional interface
- kotiln const val
- 안정해시
- spring mongodb
- 자바 1676
- rabbitmq 싱글톤
- spring mongodb switch
- Java Call By Refernce
- java 팩토리얼 개수
- ipfs bean
- go
Archives
- Today
- Total
공부 흔적남기기
프로그래머스 실패율 본문
728x90
반응형
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int[] solution(int N, int[] stages) {
//전체 스테이지가 N개
//현재 멈춰있는 스테이지 번호가 담긴 배열 stages
//확률이 똑같은 경우 처리와 쓸데없는 곳에서의 실수 때문에 1시간 넘게 걸려서 푼문제이다;;
int[] stop_people = new int[N+2]; // 1 2 3 4 5 6
//스테이지를 전부 클리어한 사람이 있을 수 있고
//0번째 스테이지는 없기 때문에를 처리해주기 위해 N+2 배열을 만듦
//각 스테이지 마다 멈춰 있는 사람 수 더해주기
for(int i =0; i<stages.length; i++){
for(int j=1; j<stop_people.length; j++){
if(stages[i] == j){
stop_people[j] +=1;
}
}
}
// 실패 확률을 담을 리스트
ArrayList<Double> fail = new ArrayList<>();
// 확률이 중복일 때를 위해 배열 하나를 더 만들어줌
// 스테이지를 전부 클리어한 사람이 있을 수 있기 때문에 N+1 배열을 만듦
// 이 조건 놓치기 좋음 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
double[] doubles = new double[N+1];
double tmp = 0;
// 사람들의 수를 all로 넣어둠
double all = stages.length;
// 0번째 스테이지(실제로 존재X)가 포함된 배열이기 때문에 stop_people -1로 만듦
for(int i =1; i<stop_people.length-1; i++){
//확률 계산하고
tmp = stop_people[i] / all;
//넣어 주기전에 double형이기 때문에 NAN이나 limit이 나올 수 있어
//멈춘 스테이지에 사람이 없으면 확률은 0
if(stop_people[i] == 0){
doubles[i] =0;
}else {
//그렇지 않다면 확률은 존재!
doubles[i] = tmp;
}
// 각 스테이지에서 실패한 사람수를 전체에서 빼줌 -> 다음 스테이지 도전자 수를 알 수 있음
all -= stop_people[i];
//fail에 확률값 추가
fail.add(doubles[i]);
}
int[] answer = new int[N];
System.out.println(fail);
//확률을 내림차순으로 정렬
Collections.sort(fail);
Collections.reverse(fail);
//이부분이 은근히 까다로운 느낌이었음
//카카오LV1 풀면서 느끼는게 문제 자체는 풀만한데 제출 형식에 맞추는게 어려움
//확률이 같은경우 스테이지가 작은 수가 앞으로 가면됨
for(int i=0; i<fail.size(); i++){
//중복을 처리하기위해 저장해둔 배열사용!
for(int j=1; j<doubles.length; j++){
//따라서 1부터 시작 만약 스테이지가 높은 것 부터 원했다면 뒤에서부터 했으면 돌렸어야 됐다.
if(fail.get(i) == doubles[j]){
answer[i] = j;
doubles[j] = -1;
break;
}
}
}
for (int i : answer) {
System.out.println(i);
}
return answer;
}
}
문제:https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
728x90
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
프로그래머스 폰켓몬 (0) | 2022.01.17 |
---|---|
프로그래머스 체육복 (0) | 2022.01.17 |
프로그래머스 소수찾기 (0) | 2022.01.16 |
프로그래머스 나머지가 1이 되는 수 찾기 (0) | 2022.01.16 |
프로그래머스 K번째수 (0) | 2022.01.16 |