문제링크 : 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보다 크거나 같은 플레이어의 수
- 스테이지 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) (0) | 2024.12.26 |