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

자바 초급문제 13-3. 실패율 도전 3일차.

Jungsoomin :) 2020. 4. 13. 02:18

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

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

 

1h정도 짤막하게 건드렸는데..1h이 나의 기준에서 짤막하다는게 감사하다는 생각이 잔잔하게 들고 있다.

 

전의 로직을 구축하는 시간보다 새 로직을 구축할 시간이 단축되었다는게 감사한 지금이다.

 

개인적인 생각이지만 전의 로직이 접근하기 복잡하게 짜놓았다는 생각이 들었다. '분명 더 좋게 처리할 수 있지 않을까..? ' 라는 생각이 들었고,  새로운 클래스를 만들어 다시금 새로 코딩하기 시작했다. 하나의 클래스를 잡고 그 필드로 실패율과 스테이지 넘버로 잡아놓고 생성자로 매개변수를 필드 값으로 초기화하여 클래스를 짰다.

그 후에 리스트를 클래스타입으로 선언하여 스테이지와 실패율을 for문 하나에 정리하도록 하게끔 하기 위해서이다. 

새로운 check 객체를 list에 집어넣어 값을 참고하게끔 해놓았다.

 

이렇게 잡아놓고서 Collections.sort를 오버라이드하여 끝낼 생각이다. 그게 여의치 않다면 찾아보고 정 이해가 안된다면 배열에 집어넣어서 Arrays.sort 를 오버라이드 하여 기준을 잡고 끝내보려고 한다.  

 

개인적으로 전보다 코드가 간결해진 것 같아서 기분이 좋다. 그래도 끝낼 때 까지 최선을 다해봐야한다.

 

재미있는 문제임에는 틀림이 없다고 생각이 든다.

 

 

 

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
46
47
48
49
50
51
52
53
54
55
56
package _2019KAKAO_BLIND_RECRUITMENT_실패율;
 
import java.util.*;
public class subClass1 {
    public int[] solution(int N, int[] stages) {
        int[] answer = {};
        //n은 스테이지 개수 , stages는 각 유저들이 머무는 스테이지 , stages의 길이는 유저의 수 , 실패율은 머무는사람 / 도달한 플레이어 의 수
        //실패율 순으로 내림차순, 실패율이 같을 경우 스테이지대로 오름차순 아무도 도달 못했을경우 실패율은 0.
        ArrayList<check> list = new ArrayList<check>();
        /*int User =0;//도달유저 
         *int Success =0;//성공유저.*/
             
        Arrays.sort(stages);
       //스테이지 기준으로 유저들의 정보를 파악해야함.
        for(int i=1; i<=N;i++) {// i 는 스테이지
            int User =0;
            int Success = 0;//<<<도전 자
            for(int j =0; j<stages.length;j++) {//유저들을 조사해야함
                if(i==stages[j]) {
                    User += 1;
                } 
                if(i<=stages[j]) {//스테이지 수 보다 크다면
                    Success += 1;
                }
                User += 0;
                Success += 0;
            }
                double  failR= (double)User/Success;
            if(User==0&&Success==0) {
                failR =0;//아무도 도달못했다면
            }else if(User ==0 && Success != 0) {
                failR =0;// 다 성공했다면
            }
 
            //failR = (double)User/Success;//실패율 계산
            list.add(new check(i,failR));//하나의 스테이지 당 하나의 실패율 계산
            System.out.println(i +"\t"+failR);
        }
 
        //
        return answer;
        
 
    }
    
    public class check {
        int stage;
        double failRate;
        
        public check(int stage, double failRate) {
            this.stage = stage;
            this.failRate = failRate;
        }
    }
    
}
cs