문제링크
문제 접근
- 배달이나 수거 중에 가장 먼 집 찾기
- 한 턴에 가장 먼집 거리 * 2 만큼 추가
- 동시에 뒤에서부터 cap 크기 만큼 배달,수거 동시 진행
코드
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
int faridx = n-1;
boolean flag = false;
int dfar = -1;
int pfar = -1;
while(true){
//가장 먼 거리 찾기
for(int i=faridx ; i>=-1 ;i--){
if(i == -1) {
flag = true;
break;
}
if(deliveries[i]!=0 || pickups[i]!=0){
faridx = i;
break;
}
}
if(flag) break;
answer += (faridx+1) * 2;
//뒤에서부터 cap만큼 빼기
int dcap = cap;
int pcap = cap;
for(int i=faridx;i>=0 ;i--){
if(dcap==0 && pcap==0) break; //다음턴으로
if(dcap!=0 && deliveries[i]!=0){
if(deliveries[i] < dcap) {
dcap -= deliveries[i];
deliveries[i] = 0;
}
else {
deliveries[i] -= dcap;
dcap = 0;
dfar = i;
}
}
if(pcap!=0 && pickups[i]!=0){
if(pickups[i] < pcap) {
pcap -= pickups[i];
pickups[i] = 0;
}
else {
pickups[i] -= pcap;
pcap = 0;
pfar = i;
}
}
}
faridx = Math.max(dfar,pfar);
}
return answer;
}
}
결과

정리
- 카카오 시험 볼때는 어렵게만 느껴졌는데 다시 풀어보니 잘 풀림