프로그래머스 | 실패율 (Java)

mul·2023년 2월 1일
0

알고리즘

목록 보기
7/65
post-custom-banner

🔒 문제

프로그래머스 Lv.1 실패율

🔑 해결

전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return하는 solution 함수를 작성하는 문제이다.

각 스테이지의 도전자 수와 클리어하지 못한 도전자의 수를 구한 다음, 실패율을 계산하고, 내림차순으로 정렬한다.

  1. 스테이지에 도달한 플레이어 수와 도달했으나 클리어하지 못한 플레이어를 저장할 이차원 배열 cha 생성.
  2. for문을 돌려 stages[j]에 저장된 값이 스테이지 번호 i이상이면, 스테이지에 도달한 것으로 판단. 스테이지에 도달한 플레이어 수 cha[i][0]++
  3. stages[j]에 저장된 값이 스테이지 번호 i와 같으면, 스테이지에 도달했으나 아직 클리어하지 못한 것으로 판단. 클리어하지 못한 플레이어 수 cha[i][1]++
  4. 실패율을 저장할 double 타입의 rate 배열 선언
  5. for문을 돌려 각 스테이지의 실패율 계산. (int형 / int형)의 결과는 int형이므로, 하나를 double로 형변환 해준다.
  6. rate에 저장된 값을 비교하면서 answer에 저장된 스테이지 번호와 함께 내림차순 정렬

🔓 코드

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        for (int i = 0; i < answer.length; i++) {
			answer[i] = i+1;
		}
        
        // 각 스테이지 도전자 수, 도달했으나 클리어하지 못한 사용자 
        int[][] cha = new int[N][2];
        for (int i = 0; i < N; i++) {
			for (int j = 0; j < stages.length; j++) {
				
				if (stages[j] >= i+1) {
					cha[i][0]++;
					
					if(stages[j] == i+1)
						cha[i][1]++;
				}
			}
		}
        
        // 실패율
        double[] rate = new double[N];
        for (int i = 0; i < cha.length; i++) {
			rate[i] = (double)cha[i][1] / cha[i][0];
		}
        
        // 정렬
        for (int i = rate.length-1; i > 0; i--) {
			for (int j = 0; j < i; j++) {
				if (rate[i] > rate[j]) {
					double tmp = rate[i];
					rate[i] = rate[j];
					rate[j] = tmp;
					
					int atmp = answer[i];
					answer[i] = answer[j];
					answer[j] = atmp;
				} else if (rate[i] == rate[j] && answer[i] < answer[j]) {
					int atmp = answer[i];
					answer[i] = answer[j];
					answer[j] = atmp;
				}
			}
		}
        
        return answer;
    }
}
post-custom-banner

0개의 댓글