본문 바로가기
알고리즘/프로그래머스

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

by justkeepgoing 2024. 3. 4.
728x90
반응형

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

2. 풀이

  • 실패율로 내림차순을 해야했고, 실패율이 같을 경우 스테이지가 낮은 것 부터 내림차순을 해야했다.
  • 실패율이 같을 때, 내림차순(sort)을 하기 위해 class 를 생성후 comparable을 사용하여 list에 넣었다.
  • 이중 for문으로 실패 인원수를 먼저 찾았다
  • 만약 실패 인원수가 없다면 continue
  • 있다면 스테이지(idx), 실패율(rate)를 리스트에 결과값을 얻을 수 있었다.

3. 코드

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.*;

public class 실패율 {
    @Test
    public void correct() {
        Assertions.assertArrayEquals(new int[]{3, 4, 2, 1, 5}, solution(5, new int[]{2, 1, 2, 6, 2, 4, 3, 3}));
    }

    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int member = stages.length;

        List<Stage> list = new ArrayList<>();
        for (int i = 1; i <= N; i++) {
            int num = 0;
            for (int j = 0; j < stages.length; j++) {
                //실패 인원수 찾기
                if (i == stages[j]) {
                    num++;
                }
            }
            if (num == 0) {
                list.add(new Stage(i, 0));
                continue;
            }
            list.add(new Stage(i, (double) num / member)); //소수점계산
            member -= num;
        }

        Collections.sort(list);

        for (int i = 0; i < N; i++) {
            answer[i] = list.get(i).idx;
        }

        return answer;
    }

    static class Stage implements Comparable<Stage> {
        int idx;
        double rate;

        public Stage(int idx, double rate) {
            this.idx = idx;
            this.rate = rate;
        }

        @Override
        public int compareTo(Stage o) {
            //기본 return은 내림차순
            //같은 실패율, 앞 스테이지부터 내림차순
            if (this.rate == o.rate) {
                return this.idx - o.idx;
            }
            return Double.compare(o.rate, this.rate);
        }
    }
}

 

반응형

 

반응형