C++:: 프로그래머스 <택배 배달과 수거하기>

jahlee·2023년 3월 14일
0

프로그래머스_Lv.2

목록 보기
9/106
post-thumbnail

상당히 많이 해맸고 개인적으로 어려웠던 문제이다. 여러번 잘못 생각해서 풀이도 난잡해지고 결과도 이상해졌다. 필자의 풀이는 좀 별로인듯 하여 다른코드 또한 첨부한다.

#include <string>
#include <vector>

using namespace std;

long long solution(int cap, int n, vector<int> deliveries, vector<int> pickups)
{
    long long deli_sum = 0;
    long long pick_sum = 0;

    for(auto d : deliveries) deli_sum += d;
    for(auto p : pickups) pick_sum += p;

    long long answer = 0;
    int longest = n-1;
    while(deli_sum > 0 || pick_sum > 0)
    {
        int c1 = cap, c2 = cap;
        int dist1 = 0, dist2 = 0;
        for(int i=longest; i>=0; i--)
        {
            if(deliveries[i] > 0 && c1 > 0)
            {
                dist1 = i > dist1 ? i : dist1;
                while(c1 > 0 && deliveries[i] > 0)
                {
                    c1--; deliveries[i]--; deli_sum--;
                }
            }
            if(pickups[i] > 0 && c2 > 0)
            {
                dist2 = i > dist2 ? i : dist2;
                while(c2 > 0 && pickups[i] > 0)
                {
                    c2--; pickups[i]--; pick_sum--;
                }
            }
            if(c1==0 && c2==0) break;
        }
        if(deliveries[longest] == 0 && pickups[longest] == 0) longest=max(dist1, dist2);
        answer += max(dist1+1, dist2+1) * 2;
    }
    return answer;
}

좋은 코드

#include <string>
#include <vector>

using namespace std;

long long solution(int cap, int n, vector<int> deliveries, vector<int> pickups)
{
    long long answer = 0;

    int del = 0, pic = 0;
    for (int i = n - 1; i >= 0; i--)
    {
        if (deliveries[i] != 0 || pickups[i] != 0)
        {
            long long cnt = 0;
            while (del < deliveries[i] || pic < pickups[i])//가능개수보다 크다면 cap만큼 더해줌
            {
                cnt++;
                del += cap;
                pic += cap;
            }
            del -= deliveries[i];//배달가능개수
            pic -= pickups[i];//수거가능개수
            answer += cnt * (i + 1) * 2;
        }
    }
    return answer;
}

0개의 댓글