- 오늘의 학습 키워드 : 구현
[문제 이름 : 택배 배달과 수거하기 (프로그래머스 2023 카카오 기출문제 , Lv 2)]
문제 url : https://school.programmers.co.kr/learn/courses/30/lessons/150369
내가 작성한 코드는 아래와 같다.
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int d = 0;
int p = 0;
// 마지막 집부터 차례대로 순회한다.
for (int i = n - 1; i >= 0; i--) {
// 물류창고 - 집까지 왕복한 횟수
int cnt = 0;
// 배달, 수거 작업
d -= deliveries[i];
p -= pickups[i];
// 왕복할 때마다 cap만큼 상자를 더 실을 수 있으므로
// 배달 상자 개수와 수거 상자 개수에 더한다.
while (d < 0 || p < 0) {
d += cap;
p += cap;
cnt++;
}
// 왕복 거리 계산
answer += (i + 1) * 2 * cnt;
}
return answer;
}
}
풀이 과정(풀이 시간 : 30분)
- 마지막 집부터 배달과 수거를 순회해야 한다.
- 왕복하면서 남은 배달 상자 개수, 수거 상자 개수를 앞 집으로 이동해야 한다.
1. for문에서 n-1부터 시작해서, 마지막 집부터 처음 집까지 순회한다.
2. 배달, 수거 작업을 실시하는데, 이때 배달과 수거 작업이 진행될 때,왕복할 때마다 cap만큼 상자를 더 실을 수 있기 때문에 해당 값을 더해준다음 거리(cnt)를 계산한다.
3. 왕복 거리이므로, (i+1)*2*cnt로 결과값을 계산한다.
내일은 우리은행 인턴 자기소개서를 작성할 예정이다.