-
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