https://www.welcomekakao.com/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율 | 프로그래머스

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를

www.welcomekakao.com

 

 

1번스테이지부터 최종 스테이지까지

실패한 사람을 카운트

 

1번 스테이지 = 1번 카운트 / 총인원

2번 스테이지 = 2번 카운트 / (총인원 - 1번 카운트)

를 반복해서 구하는것으로 최종 각 스테이지별 실패율을 구했습니다.

 

조금 고민한 부분이 실패율별 내림차순 정렬해서 출력하는건데

그냥 버블정렬을 사용했어요.

버블정렬만세.....

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
 
public class Solution {
	public int[] solution(int N, int[] stages) {
		int stagesCount = stages.length;
		ArrayList<Integer> copySta = new ArrayList<>();
		
		//fail 부분은 인덱스 1 부터 사용할래
		int[] failCount = new int[N+1];
		double[] failP = new double[N+1];
		
		
		
		for (int i = 0; i < failCount.length; i++) {
			failCount[i] = 0;
		}
		
		for (int i = 0; i < failP.length; i++) {
			failP[i] = 0.0;
		}
		
		for (Integer integer : stages) {
			copySta.add(integer);
		}
		
		
		for (int i = 1; i <= N; i++) {
			for (Integer integer : copySta) {
				if(integer == i) {
					failCount[i]++;
				}
			}
		}
		
		for (int i = 1; i < failCount.length; i++) {
			failP[i] = (double)failCount[i] / stagesCount;
			stagesCount -= failCount[i];
		}
		
		HashMap<Integer, Double> pair  = new HashMap<>();
		for (int i = 1; i <= N; i++) {
			pair.put(i, failP[i]);
		}
		
		int[] sortTemp = new int[pair.size() + 1]; 
		Iterator<Integer> keys = pair.keySet().iterator();
		int index = 1;
		while(keys.hasNext()){
			sortTemp[index] = keys.next();
			index++;
		}
		
//		for(int t: sortTemp) {
//			System.out.println("key:" + t + " value:" + pair.get(t));
//		}
		
		
		//keys = pair.keySet().iterator();
		for (int i = 1; i <= sortTemp.length; i++) {
			for(int j = 1 ; j <= sortTemp.length - i - 1 ; j++) {
				//System.out.println("j:" + j + " " + pair.get(sortTemp[j]) + " < " + "j+1:" + (j+1) + " " + pair.get(sortTemp[j+1]) + " = " + (pair.get(sortTemp[j]) <  pair.get(sortTemp[j+1])));
	            if(pair.get(sortTemp[j]) <  pair.get(sortTemp[j+1])) {
	                int temp = sortTemp[j+1];
	                sortTemp[j+1] = sortTemp[j];
	                sortTemp[j] = temp;
	            }
	        }
			
//			System.out.print("i:" + i + " 루프의 결과 = ");
//			for(int t: sortTemp) {
//				System.out.print(t + " ");
//			}
//			System.out.println();
		}
		int[] answer = new int[sortTemp.length - 1];
		
		for (int i = 1; i < sortTemp.length; i++) {
			answer[i - 1] = sortTemp[i];
		}
		
		return answer;
	}
}

저장이나 정렬부분은 더 깔끔히 하신분이 많으신듯하지만

역시 바로떠오르는건 이런것뿐이네요.

 

+ Recent posts