티스토리 뷰

#include <string>
#include <vector>

using namespace std;

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

 

그리디하게 접근하여 풀 수 있는 문제이다.

배달과 수거에 대한 변수를 따로 두고, 끝에서부터 배달해야 하는 값과 수거해야 하는 값을 체크한다.

이후 반복문을 통해 cap의 수치만큼 더해가며, 배달과 수거 모두 가능할때까지 반복한다.

이때 왕복으로 갔다오게 되므로, 이를 위해 cnt 변수를 카운팅한다.

 

해당 값을 위해 움직인 값은 경우 현재 인덱스 * 2(왕복) * cnt 일 것이다.

이를 모든 반복문에 대해서 체크해준다.

막상 코드 자체는 간단한 편이지만, 아이디어 및 구상이 쉽지 않아 다른 내용을 참고한 문제이다.

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함