[이코테][Java] 실패율

2025. 1. 12. 18:04·PS/이코테

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 설명

슈퍼 게임 개발자 오렐리는 신규사용자와 기존 사용자 사이에 스테이지 차이가 큰 문제를 해결하기 위해서 동적으로 게임 시간을 늘려 난이도를 조절하기로 한다. 오렐리를 위해 실패율을 구하는 코드를 완성하시오.

실패율 = (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수) / (스테이지에 도달한 플레이어의 수)

실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담긴 배열을 return한다.

 

입력조건

  • 전체 스테이지의 수 N
  • 게임을 이용하는 사용자가 현재 멈춰있는 스테이지 번호가 담긴 배열 stages

출력조건

  • 실패율이 높은 스테이지부터 내림차순으로 스테이지 번호가 담긴 배열 출력

입출력 예시

입력예시 출력예시
5
[2, 1, 2, 6, 2, 4, 3, 3]
[3, 4, 2,1, 5]
4
[4, 4, 4, 4, 4]
[4, 1, 2, 3]

 

 

 

 

문제 풀이

  • int[] stages : 각 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열
    - 배열 값이 4: 스테이지 3까지 클리어하고, 스테이지 4는 클리어하지 못한 상태
    - 배열 값이 N+1 : 마지막 스테이지까지 모두 클리어한 상태
  • 실패율 = (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수) / (스테이지에 도달한 플레이어의 수)
    • 스테이지 i에 도달했으나 아직 클리어하지 못한 플레이어의 수
      → 현재 멈춰있는 스테이지 번호가 i인 플레이어의 수
    • 스테이지 i에 도달한 플레이어의 수
      → 현재 멈춰있는 스테이지 번호가 i보다 크거나 같은 플레이어의 수
  • 실패율을 기준으로 내림차순 정렬, 실패율이 같다면 스테이지 번호를 기준으로 오름차순 정렬
import java.io.*;
import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        double[][] failRate = new double[N][2]; //스테이지 번호와 실패율을 담는 배열
        int[] result = new int[N];

        int totalPlayers = stages.length;     //스테이지에 도달한 플레이어 수
        for (int i = 1; i <= N; i++) {
            int challengers = 0;            //스테이지에 도달했으나 아직 클리어하지 못한 플레이어 수
            for (int j = 0; j < stages.length; j++) {
                if (i == stages[j]) {   //현재 스테이지와 같으면 클리어하지 못한 플레이어수 증가
                    challengers++;
                }
            }

            failRate[i - 1][0] = i; //스테이지 번호
            //실패율
            if (totalPlayers == 0) {    //totalPlayers가 0이면 실패율 0.0
                failRate[i-1][1] = 0.0;
            } else {
                failRate[i - 1][1] = (double) challengers / (double) totalPlayers;
            }
            totalPlayers -= challengers;
        }


        Arrays.sort(failRate, new Comparator<double[]>() {
            @Override
            public int compare(double[] o1, double[] o2) {
                if (o1[1] == o2[1]) {   //실패율이 같다면 스테이지번호 기준으로 오름차순 정렬
                    return Double.compare(o1[0], o2[0]);
                } else {                //실패율 기준으로 내림차순 정렬
                    return Double.compare(o2[1], o1[1]);
                }
            }
        });

        //스테이지 번호만 result 배열에 저장
        for (int i = 0; i < failRate.length; i++) {
            result[i] = (int) failRate[i][0];
        }

        return result;
    }
}

[참고서적]

이것이 취업을 위한 코딩 테스트다 with 파이썬 by 나동빈

저작자표시 비영리 변경금지 (새창열림)

'PS > 이코테' 카테고리의 다른 글

[이코테][Java] 특정 거리의 도시 찾기  (0) 2025.01.27
[이코테][Java] 카드 정렬하기  (0) 2025.01.13
[이코테][Java] 국영수  (0) 2025.01.09
[이코테][Java] 안테나  (1) 2024.12.28
[이코테] 정렬(Sort)  (1) 2024.12.26
'PS/이코테' 카테고리의 다른 글
  • [이코테][Java] 특정 거리의 도시 찾기
  • [이코테][Java] 카드 정렬하기
  • [이코테][Java] 국영수
  • [이코테][Java] 안테나
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (80) N
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (62) N
        • 백준 (20) N
        • 프로그래머스 (0)
        • SQL (9)
        • 이코테 (33)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[이코테][Java] 실패율
상단으로

티스토리툴바