본문 바로가기

Programmers/Level3

디스크 컨트롤러

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
57
58
59
60
61
62
63
64
65
import java.util.*;
class Solution {
    public static int getTime(ArrayList<String> list, Integer[][] sortedJobs) {
        int currentTime = 1001;
        int totalTime = 0;
 
        // 최초 요청 시간으로 초기화
        for (int i = 0; i < sortedJobs.length; i++) {
            if (currentTime > sortedJobs[i][0])
                currentTime = sortedJobs[i][0];
        }
 
        // 모두 할당될 때 까지 수행
        while (!list.isEmpty()) {
            boolean flag = true;
            for (int i = 0; i < list.size(); i++) {
                String[] s = list.get(i).split(",");
                // 요청 작업을 현재 시작할 수 있을 때
                if (Integer.parseInt(s[1]) <= currentTime) {
                    // 현재 시간 및 작업 시간 갱신
                    currentTime += sortedJobs[Integer.parseInt(s[0])][1];
                    totalTime += currentTime - Integer.parseInt(s[1]);
                    list.remove(i);
                    flag = false;
                    break;
                }
            }
            // 수행 가능한 것이 없을 경우
            if (flag)
                currentTime++;
        }
 
        // 평균 시간 반환
        return totalTime / sortedJobs.length;
    }
    public int solution(int[][] jobs) {
        int answer = 0;
        int len = jobs.length;
        Integer[][] sortedJobs = new Integer[len][];
        ArrayList<String> list = new ArrayList<String>();
 
        // int to Integer
        for (int i = 0; i < len; i++) {
            sortedJobs[i] = Arrays.stream(jobs[i]).boxed().toArray(Integer[]::new);
        }
        Arrays.sort(sortedJobs, new Comparator<Integer[]>() {
            // 걸리는 시간을 기준으로 오름차순 정렬
            @Override
            public int compare(Integer[] o1, Integer[] o2) {
                int a = o1[1- o2[1];
                // 걸리는 시간이 같으면 먼저 온 순서대로 정렬
                if (a == 0)
                    return o1[0- o2[0];
                return a;
            }
        });
 
        for (int i = 0; i < len; i++) {
            // 해당 인덱스와 요청 시간을 같이 저장
            list.add(i + "," + sortedJobs[i][0]);
        }
        answer = getTime(list, sortedJobs);
        return answer;
    }
}
cs

Comparator를 사용할 때 int형은 안 되는 줄 알고 Integer로 변환하여 수행하였다.

 

1
2
3
4
5
6
7
8
9
Arrays.sort(jobs, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        int a = o1[1- o2[1];
        if (a == 0)
            return o1[0- o2[0];
        return a;
    }
});
cs

제출 후 다시 수정하여 위 경우에도 되는 것을 확인하였다.

'Programmers > Level3' 카테고리의 다른 글

모두 0으로 만들기  (0) 2021.08.17
여행경로  (0) 2021.08.17
불량 사용자  (0) 2021.08.16
최고의 집합  (0) 2021.08.13
베스트앨범  (0) 2021.08.13