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

lhs's avatar
Nov 14, 2024
[프로그래머스] 실패율(42889)
 

1. 문제 풀이 아이디어

  • 역순으로 누적합을 구한 후, 실패율을 계산하여 이를 이차원 배열에 저장한 후, 배열을 정렬하면 문제를 해결할 수 있다.

2. 나의 정답 코드

class Solution { public int[] solution(int N, int[] stages) { int[] answer = new int[N]; int[] p = new int[N + 1]; int[] sum = new int[N + 1]; double[][] fails = new double[N][2]; for (int stage : stages) { if (stage > N) p[N]++; else p[stage - 1]++; } sum[N] = p[N]; for (int i = N - 1; i >= 0; i--) { sum[i] = sum[i + 1] + p[i]; } for (int i = 0; i < N; i++) { fails[i][0] = sum[i] == 0 ? 0 : (double) p[i] / sum[i]; fails[i][1] = i; } Arrays.sort(fails, ((o1, o2) -> { if (o1[0] == o2[0]) return Double.compare(o1[1], o2[1]); return Double.compare(o2[0], o1[0]); })); for (int i = 0; i < N; i++) { answer[i] = (int) fails[i][1] + 1; } return answer; } }

3. 정리

  • p 배열에 각 스테이지에 도달한 플레이어 수를 저장하고, N 이상의 스테이지에 도달한 플레이어는 p[N]에 저장한다.
  • sum 배열에 각 스테이지에 도달한 총 플레이어의 수를 누적해서 저장한다.
  • fails 2차원 배열에 첫 번째 원소에는 실패율을 저장하고, 두 번째 원소에는 해당 스테이지 번호를 저장한다.
  • 실패율을 계산할 때, 0으로 나누는 오류를 처리해줘야 한다.
  • Arrays.sort 메서드에 람다식을 사용하여 실패율을 내림차순으로 정렬하고, 실패율이 동일하면 스테이지 번호를 오름차순으로 정렬한다.
  • fails[i][1] 배열의 스테이지 번호를 answer 배열에 1을 더한 후 int형으로 바꾸어 저장한다.
 
Share article

LHS's Study Space