728x90
반응형
728x90
[Programmers] 택배 배달과 수거하기 2023 KAKAO BLIND RECRUIMENT - LV 2
접근
- 구현
풀이
택배 배달과 수거하기라는 문제로 배달해야 하는 택배는 배달하고 수거해야 하는 택배는 수거하는데 최소 이동 거리를 구하는 문제이다. 택배 트럭에는 박스를 실을 수 있는 공간이 정해져 있고 그 공간을 활용해 효율적이게 배달을 하는 게 목표다. 보기엔 굉장히 복잡해 보이지만 몇 줄 안되는 코드로 끝나는 문제이다.
long answer = 0;
int deliver = 0;
int pickup = 0;
for (int i = n - 1; i >= 0; i--) {
deliver += deliveries[i];
pickup += pickups[i];
최단 거리를 저장할 정답 변수와 배달이 필요한 개수를 저장할 변수 그리고 수거가 필요한 개수를 저장할 변수를 선언한다.
배열을 순회하며 마지막 인덱스 부터 접근을 하게 되는데 멀리 있는 집부터 필요한 배달과 수거가 몇 개인지를 변수에 넣는다.
while (deliver > 0 || pickup > 0) {
deliver -= cap;
pickup -= cap;
answer += (i + 1) * 2;
}
반복문을 통해 멀리 있는 집의 배달과 수거가 끝날 때 까지 반복을 진행해 주는데 트럭으로 배달을 갈 때 트럭 용량만큼 택배를 가져올 수 있고 배달이 끝나면 트럭이 비어있기 때문에 트럭 용량만큼 또 박스를 수거해 올 수 있다. 그래서 각각 배달과 수거의 수에서 트럭 용량 만큼을 빼고 왔다 갔다 반복이 필요하기 때문에 거리의 두 배만큼 이동 거리를 늘려주면 문제가 끝이 나게 된다.
전체 코드
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int deliver = 0;
int pickup = 0;
for (int i = n - 1; i >= 0; i--) {
deliver += deliveries[i];
pickup += pickups[i];
while (deliver > 0 || pickup > 0) {
deliver -= cap;
pickup -= cap;
answer += (i + 1) * 2;
}
}
return answer;
}
}
거의 코드를 60~70줄 가량 짜다 보니 문득 굳이 이렇게 할 필요가 있는 건가 싶어 다 갈아엎고 단순하게 했더니 통과해 버렸다.
728x90
'알고리즘 > 코딩테스트-Programmers' 카테고리의 다른 글
[Programmers] 두 큐 합 같게 만들기 Java (0) | 2024.09.23 |
---|---|
[Programmers] 이모티콘 할인행사 JAVA (2) | 2024.09.21 |
[Programmers] [1차] 캐시 - JAVA (1) | 2024.09.19 |
[Programmers] PCCP 기출문제 4번 / 수식 복원하기 Java (2) | 2024.09.18 |
[Programmers] PCCP 기출문제 3번 / 충돌위험 찾기 JAVA (1) | 2024.09.17 |