
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
짐의 버거는 배고픈 고객들이 줄 서 있다. 주문은 준비되는 시간이 바뀐다. 고객의 주문을 받는 순서를 정해라. 각 고객들의 번호는 1부터 n까지 앞에서 뒤로 시작한다. 당신은 고객의 주문 번호와 준비 시간을 갖게 될 것이다.
배달 시간은 주문 시간과 주문 번호로의 합으로 계산된다. 만약 두 개의 주문이 같은 시각에 배달된다면, 고객 번호가 오름차순으로 배달 된다고 가정해라.
예를 들어, n = 5인 고객들의 줄이 있다. 그들은 각각 주문 번호 order[i]와 준비 시간 prep[i]를 받게 된다.
Customer 1 2 3 4 5
Order # 8 5 6 2 4
Prep time 3 6 2 3 3
Calculate:
Serve time 11 11 8 5 7
우리는 주문이 고객에게 도착하는 순서를 아래처럼 본다.
Order by:
Serve time 5 7 8 11 11
Customer 4 5 3 1 2
jimOrders 함수를 완성해라. 고객의 주문이 배달되는 순서를 나타내는 정수형 배열을 반환해야 한다.
jimOrders 함수는 아래와 같은 매개변수를 가지고 있다.
해당 주문의 인덱스와 배달되는 시간을 함께 놔두고, 배달되는 시간으로 정렬하면 해결할 수 있다. 반복문이 많이 사용돼서 문제가 될 것 같지만 일단 사용해보자.
먼저 주문들이 배달에 걸리는 시간과 인덱스를 담아둘 리스트 ordered를 생성한다.
List<List<Integer>> ordered = new ArrayList<>();
for문을 통해 orders의 크기만큼 반복한다. 매 반복마다 주문의 인덱스와 배달되는 시간을 ordered에 담아준다.
for(int i = 0; i < orders.size(); i++){
List<Integer> item = new ArrayList<>();
item.add(i + 1);
item.add(orders.get(i).get(0) + orders.get(i).get(1));
ordered.add(item);
}
ordered를 배달되는 시간 기준으로 오름차순으로 정렬한다.
ordered.sort((o1, o2) -> {
return o1.get(1).compareTo(o2.get(1));
});
배달되는 순서만 담을 정수 리스트 result를 생성한다. for문을 ordered의 크기만큼 반복하고, 매 반복마다 ordered의 주문 번호(0번쨰 값)를 담아준다.
List<Integer> result = new ArrayList<>();
for(int i = 0; i < ordered.size(); i++){
result.add(ordered.get(i).get(0));
}
마지막으로 result를 반환한다.
return result;
public static List<Integer> jimOrders(List<List<Integer>> orders) {
List<List<Integer>> ordered = new ArrayList<>();
for(int i = 0; i < orders.size(); i++){
List<Integer> item = new ArrayList<>();
item.add(i + 1);
item.add(orders.get(i).get(0) + orders.get(i).get(1));
ordered.add(item);
}
ordered.sort((o1, o2) -> {
return o1.get(1).compareTo(o2.get(1));
});
List<Integer> result = new ArrayList<>();
for(int i = 0; i < ordered.size(); i++){
result.add(ordered.get(i).get(0));
}
return result;
}