ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Programmers LV.3 디스크 컨트롤러
    Programmers 2020. 12. 29. 15:56
     @org.junit.Test
        public void diskController(){
            int[][] jobs ={{0, 10}, {2, 12}, {9, 19}, {15, 17}};
    
           /*
           int[][] jobs = {{0, 3}, {1, 9}, {2, 6}};
            int[][] jobs ={{0, 10}, {2, 10}, {9, 10}, {15, 2}};
    
    
            int[][] jobs ={{0, 3}, {1, 9}, {2, 6}};
            int[][] jobs ={{0, 1}};
            int[][] jobs ={{1000, 1000}};
            int[][] jobs ={{0, 1}, {0, 1}, {0, 1}};
            int[][] jobs ={{0, 1}, {0, 1}, {0, 1}, {0, 1}};
            int[][] jobs ={{0, 1}, {1000, 1000}};
            int[][] jobs ={{100, 100}, {1000, 1000}};
            int[][] jobs ={{10, 10}, {30, 10}, {50, 2}, {51, 2}};
            int[][] jobs ={{0, 3}, {1, 9}, {2, 6}, {30, 3}};
            */
    
    
            List<Integer> jobId = new ArrayList<>();
            for(int a=0; a<jobs.length; a++) jobId.add(a);
    
            Collections.sort(jobId, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    if (jobs[o1][1] == jobs[o2][1]) {
                        return Integer.compare(jobs[o2][1],jobs[o1][1]);
                    }
                    else {
                        return Integer.compare(jobs[o1][1],jobs[o2][1]);
                    }
                }
            });
    
            int requestStartTime =0;
            int sumTime = 0;
    
            while (jobId.size() > 0){
                for(int b=0; b<jobId.size(); b++){
                    int[] jobValue = jobs[jobId.get(b)];
                    int requestTime = jobValue[0];
                    int complateTime = jobValue[1];
    
                    if(requestStartTime >= requestTime){
                        requestStartTime += complateTime ;
                        sumTime += requestStartTime - requestTime;;
    
                        jobId.remove(b);
                        break;
                    }
    
                    if(b == jobId.size() -1){
                        requestStartTime++;
                    }
    
                    System.out.println("requestStartTime ="+requestStartTime);
                    System.out.println("sumTime ="+sumTime);
                }
            }
    
    
            int answer =  (int) Math.ceil((double) (sumTime /jobs.length) );
            System.out.println(answer);
    
    
        }

     

     

    지문을 읽을때마다 느끼는거지만 직관적으로 읽고, 코테를 보는게 도움이 될꺼같다.

     

     

    'Programmers' 카테고리의 다른 글

    Programmers LV.2 가장 큰 수  (0) 2020.12.29
    Programmers LV.1 K번째수  (0) 2020.12.29
    Programmers LV.2 더 맵게  (0) 2020.12.28
    Programmers LV.2 프린터  (0) 2020.12.27
    Programmers LV.2 다리를 지나가는 트럭  (0) 2020.12.23

    댓글

Designed by black7375.