Algorithm/Java

프로그래머스 - 실패율 java :: 2019 KAKAO BLIND RECRUITMENT :: 42889

고고마코드 2022. 7. 5. 12:00
반응형

문제 링크

코딩테스트 연습 - 실패율 | 프로그래머스 (programmers.co.kr)


문제 풀이

코드 1

public int[] solution(int N, int[] stages) {
    List<Integer> stagesList = new ArrayList<Integer>();
    List<Double> failureList = new ArrayList<>();
    List<Integer> answerList = new ArrayList<>();

    for(int stage : stages) stagesList.add(stage);

    for(int i=1; i<=N; i++) {
        int challenger = stagesList.size();
        Iterator<Integer> iter = stagesList.iterator();
        while(iter.hasNext()) {
            if(iter.next() <= i) iter.remove();
        }

        double failureRate = (double)(challenger - stagesList.size()) / challenger;
        failureList.add(failureRate);

        for(int j=0; j<failureList.size(); j++) {
            if(j == failureList.size()-1) {
                answerList.add(i);
                break;
            }
            if(failureRate > failureList.get(answerList.get(j)-1)) {
                answerList.add(j, i);
                break;
            }
        }
    }

    int[] answer = new int[N];
    for(int i=0; i<answer.length; i++) {
        answer[i] = answerList.get(i);
    }

    return answer;
}
  • statesList
    각 스테이지의 도전자, 통과자를 구분하기 위한 리스트
    실패한 도전자는 리스트에서 제외한다.

  • failureList
    각 스테이지 순서대로 실패율을 저장

  • answerList
    실패율이 높은 순서대로 스테이지를 저장
    핵심은 실패율 저장 후 answerList에 정렬된 순서로 담는 부분입니다.

  • void add(int index, E element)
    List에 요소를 삽입하는 메소드입니다.
    index를 주게 되면 해당 index 위치에 요소를 삽입합니다.
    내림차순이므로 현재 스테이지의 실패율이 어떤 위치에 적합한 지 찾아 삽입합니다.

테스트 케이스 처리속도

  • 🔥 최대 2058.77ms

반응형