자바 초급문제로 맨땅에 해딩하기

자바 초급문제 13-1. 실패율 도전중.

Jungsoomin :) 2020. 4. 6. 01:08

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42889)

자바 초급 문제의 2019 KAKAO BLIND RECRUITMENT안의 실패율이다.

 

 

로직을 짜는데에 2시간 2시간 가량을 사용한 듯하다. 스스로 느끼기에 생각보다 굉장히 난해한 듯 하다.

일단 아침시간을 당겨야하기에..일단 오늘은 일찍 잠에들고..내일 승부수를 던져봐야겠다.

출력 값에도 문제가 있기에 로직을 엎고 다시시작해봐야 할 듯 하다.

 

괜시리 떨리기도하고 흥미로운 마음이 잔잔하게 느껴지는 것 같다. 그만큼 도전하고 싶어진다.

 

내일 다시 도전해보겠다! :)

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package _2019KAKAO_BLIND_RECRUITMENT_실패율;
 
import java.util.*;
public class Exam {
    public int[] solution(int N, int[] stages) {
        int[] answer = {};
        Stack<Double> stack = new Stack<>();//임시로 넣어줄 실패율 확인 스택리스트
        double[] stageFailRate = new double[N];//스테이지당 실패율을 담을 배열 
 
        int[] stageNum = new int[N];//N 만큼의 배열을 만들고 스테이지 더해주려고 함.
        int challUser =0//도전자 수
        int failUser = 0//실패자 수
        double failRate = 0;//실패율
        int firstStage =N-(N-1);//첫번째 스테이지 즉 1.
        
        for(int i =0 ; i<N; i++) {
            stageNum[i] = firstStage; //첫배열 부터 1을 더하고
            firstStage++;//1씩 증가시켜 다음 스테이지가 저장 되게 한다.
        }//여기까지하면 stageNum에 스테이지 순번이 1~N까지 넣어졌을 것이다.
        
        Arrays.sort(stages);//일단 작은 스테이지부터 올라갈 생각임.
        
        for(int i =0; i<stageNum.length; i++) { // i가 스테이지 순번만큼 돌때에
            for(int j =0; j<stages.length; j++) {//j의 플레이어의 모든 스테이지 상황을 파악
                if(stageNum[i] <= stages[j]) {//해당 스테이지보다 더 크거나 같다면 도전자임
                    challUser += 1//도전자 수만큼 증가
                }else if(stageNum[i] == stages[j]) {//같다면 실패해서 막힌사람
                    failUser += 1;
                }else if(!(stageNum[i]>=stages[j]&&stageNum[i]<=stages[j])) { //막힌사람이 아무도 없다면
                    failUser += 0;//0을 합산 함 다 없으면 0이 될 것이다.
                }
            }
             failRate = (double)failUser/challUser; //해당 스테이지의 실패율을 계산해줌
             stageFailRate[i] = failRate;//첫번째 실패율 부터 넣어줌 그러다보면 스테이지 당 실패율이 행렬에 차곡차곡 쌓일 것임.        
        }
        //이제 해당 인덱스 값을 비교해서 인덱스 넘버를 순차적으로 answer에 넣어주면 끝날 것 같은데..
        
        
        for(int i=0; i<stageFailRate.length; i++) {
            System.out.println(stageFailRate[i]);
        }//일단 계산로직이 맞나 확인
 
        return answer;
    }
}
cs