프로그래밍/코딩테스트

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

바토파 2024. 11. 4. 23:10
반응형

문제 주소

https://school.programmers.co.kr/learn/courses/30/lessons/150369

 

 

풀이

https://school.programmers.co.kr/questions/43364

못 풀어서 위의 게시물을 참고하였다.

 

d와 p가 0이 될 때까지 while문을 반복하는 것이 핵심이다.

 

일단 d와 p에서 이렇게 뺀다.

        d -= deliveries[i];
        p -= pickups[i];

 

물류창고에 들르면 d와 p에 cap 만큼의 여유가 생긴다.

그렇기 때문에 d와 p에 cap 만큼 더한 후에 count를 증가시켜 물류창고에 들른 횟수를 기록해준다.

        while (d < 0 || p < 0){
            d += cap;
            p += cap;
            count++;
        }

 

while문을 빠져나오면 answer에 i에서 물류창고 까지의 거리 * count 만큼을 더해준다.

그리고 count를 0으로 초기화시켜준다.

        answer += (i + 1) * 2 * count;
        count = 0;

 

 

코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

long long solution(int cap, int n, vector<int> deliveries, vector<int> pickups) {
    long long answer = 0;
    
    int d = 0;
    int p = 0;
    int count = 0;
    
    for (int i = n-1; i >= 0; i--){
        d -= deliveries[i];
        p -= pickups[i];
        
        while (d < 0 || p < 0){
            d += cap;
            p += cap;
            count++;
        }
        
        answer += (i + 1) * 2 * count;
        count = 0;
    }
    
    return answer;
}
반응형