CodeingTestPrac/Java Coding Test

카카오 블라인드 2019 실패율 [자바 코테 준비 3일차]

sung.hyun.1204 2023. 5. 5. 19:59

 

자바 코드 먼저 보자 

void kakao19Final_test() {
        //given
        int N = 5;
        int[] stages = {2, 1, 2, 6, 2, 4, 3, 3};

        Arrays.sort(stages);   // Arrays.stream(stages).forEach(System.out::println);

        System.out.println(Arrays.stream(stages)
                .mapToObj(Integer::toString)
                .collect(Collectors.joining(" ")));

        Map<Integer,Integer> clearStage = new HashMap<>();

        for(int item : stages){
            clearStage.put(item,clearStage.getOrDefault(item,0)+1);
        }

        System.out.println(clearStage);

        double[] ratio = new double[N+1];
        int counted = 0;
        for(int i = 1 ; i <N+1 ; i++) {
            int item = clearStage.getOrDefault(i,0);
            if(item != 0 && (stages.length - counted) != 0 ){
                ratio[i] = (double) item /(stages.length - counted);
                counted += item;
            }
        }
        System.out.println(Arrays.stream(ratio)
                .mapToObj(Double::toString)
                .collect(Collectors.joining(" ")));

        List<Integer> anar = new ArrayList();
        for(int i = 1 ;i<N+1;i++){
            anar.add(i);
        }

        Collections.sort(anar,(a,b)->Double.compare(ratio[b],ratio[a]));

        int[] answer = anar.stream().mapToInt(i->i).toArray();

        System.out.println(answer);
}

 

준비를 하면서 느낀것이  자료 구조 Map 을 잘 모르겠으면 class 를 프로그래머스 에서  생성후 override 를 하는 방식도 있지만 비추이다.

 

자료형 doble 이 float 보다 크다.

Arrays.stream 은 double, int ,long 만 제공을 하니 참고하자.

 

완벽한데 시간 초과가 나면 collection 으로 전환하자.