package 프로그래머스.자바.택배배달과수거하기;
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = -1;
// 1. 투 포인터 각각 최대점부터 시작
int d, p;
d = p = n-1;
// 2. 최대 거리를 저장할 변수
int dist = 0;
long result = 0;
// 3. d, p가 모두 -1이 되면 멈춤
while(d >= 0 || p >= 0){
dist = Integer.MIN_VALUE;
int count = cap;
while(count > 0 && d >= 0){
if(deliveries[d] > 0) {
dist = Math.max(dist, d);
deliveries[d] -= 1;
count--;
} else d -= 1;
}
count = cap;
while(count > 0 && p >= 0){
if(pickups[p] > 0) {
dist = Math.max(dist, p);
pickups[p] -= 1;
count--;
} else p -= 1;
}
if(dist == Integer.MIN_VALUE) break;
result += (dist+1)*2;
}
answer = result;
return answer;
}
}
43분
언뜻 보기에 그리디문제 같아서 그리디하게 생각해보다보니
투포인터로 접근하게 되었다.
'문제풀이 > 프로그래머스' 카테고리의 다른 글
괄호 변환 (0) | 2024.04.08 |
---|---|
양궁대회 (0) | 2024.04.06 |
리코쳇 로봇 (1) | 2024.04.05 |
푸드 파이트 대회 Java (0) | 2024.02.28 |
공원 산책 Java (0) | 2024.02.26 |