[프로그래머스] 실패율

The Flawless Bead·2023년 2월 10일
0

프로그래머스

목록 보기
5/20
post-thumbnail

🔗 문제로 이동 👉 [실패율]



이 문제의 핵심은 크게 아래와 같이 볼 수 있다.

  1. 실패율을 담은 List 내림차순으로 정렬하기
  2. 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의하기



✅ 문제풀이

  1. 해당 stage 와 실패율을 담을 리스트 failureRate 를 선언한다.
  2. stage 에 도달한 유저가 없는경우 해당 스테이지의 실패율은 0 으로 정의한다.
  3. 실패율을 내림차순으로 정렬한다.

🔥 compare() 메소드를 사용하여 오름차순으로 정렬할 경우

첫번째 파라미터 > 두번째 파라미터 이면 양수
첫번째 파라미터 < 두번째 파라미터이면 음수
같으면 0 을 리턴한다.
반면 ‘내림차순’으로 정렬 할 경우 양수음수반대로 리턴하면 된다.

import java.util.ArrayList;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        ArrayList<double[]> failureRate = new ArrayList<double[]>();
        
        // 실패율 구하기 
        for(int i = 1; i <= N; i++) {
            double arrive = 0;
            int clear = 0;
            for(int j = 0; j < stages.length; j++) {
                if(stages[j] >= i) {
                    if(stages[j] == i) arrive++;
                    clear++;
                }
            }
            // 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의    
            if(clear == 0) {
                failureRate.add(new double[] {i, 0});
                continue;
            }
            failureRate.add(new double[] {i, arrive/clear});
        }
        
        //직접 정의해서 정렬하기는 방법은 아래에 따로 정리! 
        // 실패율 내림차순으로 정렬하기 
        failureRate.sort((a, b) -> Double.compare(b[1], a[1]));
        
        // 출력
        for(int i = 0; i < N; i++) {
            answer[i] = (int)failureRate.get(i)[0];
            //System.out.println((int)failureRate.get(i)[0] + "/" + failureRate.get(i)[1]);
        }
        
        return answer;
    }
}



💡 람다식이 아닌 직접 정의해서 정렬해보기

import java.util.Collections;

Comparator<double[]> comparator = new Comparator<double[]>() {
		@Override
		public int compare(double[] o1, double[] o2) {
				if(o1[1] > o2[1]) {
						return -1; // 내림차순일 경우 음수 
				} else if(o1[1] == o2[1]) {
						return 0; 
				} else {
						return 1; // 내림차순일 경우 양수 
				} 
		}
};

Collections.sort(failureRate, comparator);



📚 참고 사이트

https://taehoung0102.tistory.com/25

https://ttl-blog.tistory.com/148

profile
오늘을 살고 내일을 꿈꾸는 낭만주의자

0개의 댓글