비버놀로지

[Programmers 프로그래머스] 42889 실패율 본문

ALGORITM/JAVA

[Programmers 프로그래머스] 42889 실패율

KUNDUZ 2021. 1. 10. 00:15
728x90

programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

각 각의 스테이지에 실패해서 있는 횟수를 추가해 준다. 

위의 예제를 보면 1에 한명 2에 3명 3에 3명 4에 1명 6에 1명이 있는 것을 알 수 있다. 이러한 값을 Stage라는 클래스를 만들어서 실패율과 스테이지를 저장해 준다.

 

그렇게 만들어진 Stage 클래스를 이용해서 1스테이지에 한명이 실패해 있는 상태이므로 실패율은 1/8을 스테이지 클래스를 이용해서 1에 실패율은 1/8을 넣어준다.

 

그리고 2스테이지는 1스테이지에서 실패한 1명을 빼고, 3/7과 함께 리스트를 넣어준다.

 

그렇게 만들어진 리스트를 comparable을 이용해서 정렬을 해주고, 결과값에 넣어주어 출력해 준다.

 

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int[] solution(int N, int[] stages) {
		int[] answer = new int[N];
		double[] temp = new double[N + 1];
		ArrayList<Stage> arrlist = new ArrayList<Stage>();

		int size = stages.length;
		for (int i = 0; i < stages.length; i++) {
			if (stages[i] <= N) {
				temp[stages[i]]++;
			} else
				continue;
		}

		for (int i = 1; i <= N; i++) {
			double k = temp[i];
			if (size == 0) {

				temp[i] = 0;
			} else {

				temp[i] /= size;
			}
			size -= k;

			arrlist.add(new Stage(i, temp[i]));

		}
		arrlist.sort(Stage::compareTo);
		for (int i = 0; i < arrlist.size(); i++) {
			answer[i] = arrlist.get(i).stage;
		}
        return answer;
    }
}
	class Stage implements Comparable<Stage>{
		int stage;
		double failure;
		
		public Stage(int stage, double failure) {
			super();
			this.stage = stage;
			this.failure = failure;
		}
		@Override
		public int compareTo(Stage o) {
			if(this.failure == o.failure) {
				return this.stage < o.stage ? -1 : 1;
			}else {
				
				return this.failure>o.failure?-1:1;
			}
		}
		
	}
728x90
Comments