프로그래머스 택배배달과수거하기 java

정상민·2023년 10월 11일

문제링크

문제 접근

  • 배달이나 수거 중에 가장 먼 집 찾기
  • 한 턴에 가장 먼집 거리 * 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;
    }
}

결과

정리

  • 카카오 시험 볼때는 어렵게만 느껴졌는데 다시 풀어보니 잘 풀림
profile
안녕하세요! 개인 공부를 꾸준히 기록하는 공간입니다.

0개의 댓글