Skip to content

Conversation

@wnsmir
Copy link
Collaborator

@wnsmir wnsmir commented Aug 2, 2025

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

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

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

1.5h

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ตœ๋‹จ๊ฑฐ๋ฆฌ? ์ˆœ์—ด? ์ƒ๊ฐํ•ด๋ดค์ง€๋งŒ ๋งค๋ฒˆ ์ฐธ๊ณ ํ•ด์•ผํ•˜๋Š” ๊ธฐ์ค€์ด ๋‹ฌ๋ผ์ ธ ๊ทธ๋ฆฌ๋””์ž„์„ ์ง๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์ž˜์ฝ์–ด๋ณด๋ฉด ๊ฒฐ๊ตญ ํ•œ๋ฒˆ ๋‹ค๋…€์˜ค๋Š”๊ธธ์— ์ตœ๋Œ€ํ•œ ๋ฉ€๋ฆฌ์žˆ๋Š”์ง‘๋ถ€ํ„ฐ ๋ฐฐ์†ก/์ˆ˜๊ฑฐ๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋จผ๊ธธ์„ ๋‹ค์‹œ๊ฐˆ์ˆ˜๋ก ์ค‘์ฒฉํ•ด์„œ ๊ฐ€๋Š”๊ธธ์ด ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ํ•œ๋ฒˆ ์ถœ๋ฐœํ• ๋–„ ๊ฐ€์žฅ๋จผ ์ˆ˜๊ฑฐ ํ˜น์€ ๋ฐฐ๋‹ฌํ•  ์ง‘์„ ์ •ํ•˜๊ณ , ๊ทธ ๊ฑฐ๋ฆฌ์˜ ๋‘๋ฐฐ(์™•๋ณต)์„ ๋‹ต์— ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

๋„์ฐฉํ•œ ์ง‘์€ cap์˜ ์—ฌ์œ ๊ฐ€ ๋˜๋Š”๋งŒํผ ๋ฐฐ์†ก/์ˆ˜๊ฑฐ ํ•ด์ฃผ๊ณ , ๋‹ค์Œ์ง‘์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฐ์†ก, ์ˆ˜๊ฑฐ๋ฌผ๋Ÿ‰์ด 0์ด๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ํ’€๋ฆฝ๋‹ˆ๋‹ค.

๋ญ”๊ฐ€ ์–ด๋ ค์šด๋ฌธ์ œ๋Š” ์•„๋‹Œ๋ฐ ์• ๋งคํ•œ๊ฑธ ํ™•์‹คํžˆ ๊ตฌํ˜„ํ•จ์— ์žˆ์–ด์„œ ๊นŒ๋‹ค๋กœ์šด ์œ ํ˜•์ด ๊ทธ๋ฆฌ๋””์ธ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

def solution(cap, n, deliveries, pickups):
    answer = 0
    last_del = n-1
    last_pick = n-1
    
    # ์•„์ง ๋ฐฐ๋‹ฌ, ์ˆ˜๊ฑฐํ•  ์ง‘์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด ๋ฐ˜๋ณต
    while last_del >= 0 or last_pick >= 0:
        # ๊ฐ€์žฅ ๋จผ ๋ฐฐ๋‹ฌ/์ˆ˜๊ฑฐํ•  ์ง‘ ์—…๋ฐ์ดํŠธ
        while last_del >= 0 and deliveries[last_del] == 0:
            last_del -= 1
        while last_pick >= 0 and pickups[last_pick] == 0:
            last_pick -= 1
        
        # ์ด๋ฒˆํ„ด์— ๊ฐˆ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์ง‘
        far = max(last_pick, last_del) + 1
        answer += far * 2

        # deliver == ํ•œ๋ฒˆ์— ๊ฐ€๋Šฅํ•œ ๋ฐฐ๋‹ฌ ์ˆ˜
        deliver = cap
        
        # ๋ฐฐ๋‹ฌ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฐฐ๋‹ฌํ•ด์•ผํ•  ์ง‘์ด ๋‚จ์•˜๋””๋ฉด
        while deliver > 0 and last_del >= 0:
            # ์ง‘์ด ๋น„์—ˆ์„๋–„ ๋‹ค์Œ์ง‘์œผ๋กœ
            if deliveries[last_del] == 0:
                last_del -= 1
                continue
            
            # ์ตœ๋Œ€์šฉ๋Ÿ‰๋ณด๋‹ค ๋ฐฐ๋‹ฌํ• ๊ฒŒ ์ ์„๋•Œ ์ตœ๋Œ€์šฉ๋Ÿ‰ ์ค„์ด๊ณ  ๋‹ค์Œ์ง‘
            if deliveries[last_del] <= deliver:
                deliver -= deliveries[last_del]
                deliveries[last_del] = 0
                last_del -= 1
            
            # ์ตœ๋Œ€์šฉ๋Ÿ‰์„ ๋„˜์–ด์„ค๋•Œ ์ตœ๋Œ€์šฉ๋Ÿ‰๋งŒํผ ๋ฐฐ๋‹ฌํ•˜๊ณ  ์ข…๋ฃŒ
            else:
                deliveries[last_del] -= deliver
                deliver = 0

        pick = cap
        while pick > 0 and last_pick >= 0:
            if pickups[last_pick] == 0:
                last_pick -= 1
                continue
                
            if pickups[last_pick] <= pick:
                pick -= pickups[last_pick]
                pickups[last_pick] = 0
                last_pick -= 1
                
            else:
                pickups[last_pick] -= pick
                pick = 0

    return answer

Copy link
Member

@9kyo-hwang 9kyo-hwang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด๊ฒƒ๋„ 2๋…„ ์ „์˜ ์™€ํƒ€์‹œ๊ฐ€ ํ’€์—ˆ์—ˆ๊ตฐ์š”... ๊ณผ๊ฑฐ์˜ ์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ํ•˜๋ฃจ์ข…์ผ ํ–ˆ๋‚˜ ๋ด…๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๊ฐ€์žฅ ๋จผ ์ง‘๋ถ€ํ„ฐ ๋ฐฐ๋‹ฌ/์ˆ˜๊ฑฐ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ ์€ ๋‹ค๋“ค ์บ์น˜ํ•˜์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๊ฑฐ๋ฅผ ๋ณด๊ณ  stack ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค๋”๋ผ๊ตฌ์š”.

  1. ๋งจ ๋’ค๋ถ€ํ„ฐ cap๋งŒํผ ๋ฐฐ๋‹ฌํ•˜๊ธฐ
  2. ๋งจ ๋’ค๋ถ€ํ„ฐ cap๋งŒํผ ์ˆ˜๊ฑฐํ•˜๊ธฐ
  3. 1, 2 ๊ณผ์ •์„ ๋ชจ๋“  ์ง‘์ด ์š”๊ตฌํ•˜๋Š” ๋ฌผ๋Ÿ‰์„ ์ณ๋‚ผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต, ๊ทธ ๊ณผ์ •์—์„œ ๋ฐฐ๋‹ฌ/์ˆ˜๊ฑฐ ์ค‘ ๋” ๊ธด ๊ฑฐ๋ฆฌ๋ฅผ ๋ˆ„์ 
#include <string>
#include <vector>

using namespace std;

long long solution(int cap, int n, vector<int> deliveries, vector<int> pickups) {   
    // ์š”๊ตฌ ๊ฐœ์ˆ˜๊ฐ€ 0์ธ ๊ฑด ๋ฏธ๋ฆฌ ์ณ๋ƒ…๋‹ˆ๋‹ค.
    while(!deliveries.empty() && deliveries.back() == 0) deliveries.pop_back();
    while(!pickups.empty() && pickups.back() == 0) pickups.pop_back();
    size_t answer = max(deliveries.size(), pickups.size());  // ์ตœ์ดˆ ์ด๋™ ๊ฑฐ๋ฆฌ๋Š” ๋‘˜ ์ค‘ ๋” ๊ธด ๊ฒƒ
    
    while(!deliveries.empty() || !pickups.empty()) {
        size_t capacity = 0;
        while(!deliveries.empty()) {  // ์šฐ์„  ๋ฐฐ๋‹ฌ์„ ์ณ๋ƒ…๋‹ˆ๋‹ค.
            capacity += deliveries.back();
            deliveries.pop_back();
            
            if(capacity > cap) {  // ์ดˆ๊ณผ๋ถ„์€ ๋‹ค์‹œ ๋งจ ๋์— ์‚ฝ์ž…ํ•˜์—ฌ ๋‹ค์Œ ๋ฃจํ”„์—์„œ ์ฒ˜๋ฆฌ
                deliveries.emplace_back(capacity - cap);
                break;
            }
        }
        
        capacity = 0;
        while(!pickups.empty()) {  // ๋‹ค์Œ์€ ์ˆ˜๊ฑฐ
            capacity += pickups.back();
            pickups.pop_back();

            if(capacity > cap) {  // ๋™์ผํ•˜๊ฒŒ ์ดˆ๊ณผ๋ถ„์€ ๋‹ค์‹œ ๋งจ ๋์— ์‚ฝ์ž…ํ•˜์—ฌ ๋‹ค์Œ ๋ฃจํ”„์—์„œ ์ฒ˜๋ฆฌ
                pickups.emplace_back(capacity - cap);
                break;
            }
        }
        
        // ๋‘˜ ์ค‘ ๋‹ค์Œ ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๊ธด ๊ฒƒ์„ ๋ˆ„์ 
        answer += max(deliveries.size(), pickups.size());
    }
    
    // ์™•๋ณต์ด๋ฏ€๋กœ 2๋ฐฐ
    return answer * 2;
}

Copy link
Collaborator

@kangrae-jo kangrae-jo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋„ ๊ตํ™ฉ๋‹˜์˜ ์ถ”์ฒœ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์˜ˆ์ „์— ํ’€์–ด๋ณธ ๊ฒƒ ๊ฐ™์•„์š”.
๊ทธ๋ž˜๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ’€์–ด๋ณด๊ณ ์‹ถ์–ด์„œ ์‹œ๋„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

์ถœ๋ฐœํ• ๋•Œ ์ตœ๋Œ€๋กœ ์ „๋ถ€ ๋†“์œผ๋ฉด์„œ ๊ฐ€๊ณ , ๋Œ์•„์˜ฌ๋•Œ ์ตœ๋Œ€๋กœ ์ „๋ถ€ ๋“ค๊ณ ์˜ค๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐํ•˜๋ฉฐ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์Œ... ์ €๋„ ์ค€์šฉ๋‹˜ ์ฒ˜๋Ÿผ (์ธ๋ฑ์Šค๋กœ ๋ฐฐ์—ด์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ) ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฒŒ ์งฐ๋Š”๋ฐ
์ผ๋ถ€ ์ผ€์ด์Šค์—์„œ ํ‹€๋ฆฌ๋”๋ผ๊ตฌ์š”...

๊ทธ๋ž˜์„œ ๊ณผ๊ฑฐ์˜ ๊ธฐ์–ต์„ ๋”๋“ฌ์–ด์„œ ์Šคํƒ์œผ๋กœ ํ’€์–ด๋ดค์Šต๋‹ˆ๋‹ค.
๊ทธ๋žฌ๋”๋‹ˆ ํ’€๋ฆฌ๋”๊ตฐ์š”...

๊ตฌํ˜„์€ ์ฐธ ์‹ ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ๊ณ ๋ ฅ๊ณผ ์ง‘์ค‘๋ ฅ์„ ๋Š˜๋ฆฌ๊ธฐ์—๋„ ์ข‹์€ ์œ ํ˜•์ธ๊ฒƒ ๊ฐ™๋„ค์š”.

#include <stack>
#include <vector>
#include <algorithm>

using namespace std;

void move(stack<int>& s, int capacity) {
    int carry = 0;
    while (!s.empty()) {
        int cur = s.top();
        s.pop();
        
        // ํ˜„์žฌ ๊ฐ€๋Šฅํ•œ ๋งŒํผ๋งŒ ๋‘๊ณ ๊ฐ€๊ธฐ or ๋“ค๊ณ ๊ฐ€๊ธฐ
        if (carry + cur > capacity) {
            s.push(cur - (capacity - carry));
            break;
        }
        // ํ˜„์žฌ์— ๋‹ค ๋‘๊ณ ๊ฐ€๊ธฐ or ๋“ค๊ณ ๊ฐ€๊ธฐ
        carry += cur;
    }
}

long long solution(int cap, int n, vector<int> deliveries_, vector<int> pickups_) { 
    // ์Šคํƒ์œผ๋กœ ํ‘œํ˜„
    stack<int> deliveries, pickups;
    for (int d : deliveries_) deliveries.push(d);
    for (int p : pickups_)    pickups.push(p);
    
    // ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐ
    long long answer = 0;
    while (!deliveries.empty() || !pickups.empty()) {
        while (!deliveries.empty() && deliveries.top() == 0) deliveries.pop();
        while (!pickups.empty()    && pickups.top() == 0)    pickups.pop();
        answer += max(deliveries.size(), pickups.size());
        
        move(deliveries, cap);
        move(pickups, cap);
    }
    
    return answer * 2;
}

+) ์•„ ๊ทธ๋ฆฌ๊ณ  ๊ตํ™ฉ๋‹˜์˜ solutionํ•จ์ˆ˜ return ๋ฐฉ์‹์ด ๋งˆ์Œ์— ๋“ค์–ด์„œ ๋”ฐ๋ผํ•ด๋ดค์Šต๋‹ˆ๋‹ค
๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” answer์ด ๋ฌด์กฐ๊ฑด ์™•๋ณต์ด์–ด์„œ ๊ฐ€๋Šฅํ•œ ํŠธ๋ฆญ๊ฐ™๋„ค์š”.

++ ) ์•„ ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์˜ top == 0์ธ ๋…€์„๋“ค์„ ๋บด์ฃผ๋Š” ์ด์œ ๋Š” ์™•๋ณต ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ• ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!
moveํ•จ์ˆ˜๋‚ด์—์„œ๋Š” 0์ด๋ผ๋„ ์ •์ƒ๋™์ž‘ํ•จ์œผ๋กœ ์•ˆํ•ด์ค˜๋„ ๋˜๋‚˜ ์‹ถ์ง€๋งŒ,
๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ• ๋•Œ๋Š” top ==0 ์ธ ๋…€์„์ด size๋ฅผ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นผ์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ € ๋‘ while๋ฌธ์„ ์—†์• ๊ณ  ์ œ์ถœํ•ด๋ณด๋ฉด ๋”ฑ 1๊ฐœ์˜ ์ผ€์ด์Šค์—์„œ ํ‹€๋ ธ๋‹ค๊ณ  ๋œน๋‹ˆ๋‹ค.

Copy link
Collaborator

@kokeunho kokeunho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋Š” ๊ธ‰ํ•˜๊ฒŒ ํ’€์–ด์„œ ๊ทธ๋Ÿฐ์ง€ ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค;
๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์„œ ๊ทธ๋Ÿฐ๊ฑฐ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ ์š”.

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ๋งŽ์ด ํ’€์–ด๋ด์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ €๋ฒˆ ์ค€์šฉ๋‹˜ PR๋ถ€ํ„ฐ ๋А๋‚€ ๊ฒƒ์ธ๋ฐ ์ œ๊ฐ€ ์ด๋Ÿฐ ์œ ํ˜•์— ์•ฝํ•œ ๊ฒƒ ๊ฐ™์•„์š”.

์Šคํƒ์„ ์‚ฌ์šฉํ•œ ๋‹ค๋ฅธ ๋ถ„๋“ค๊ณผ ๋‹ฌ๋ฆฌ ๋”ฐ๋กœ ์ธ๋ฑ์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๋งŒ ๋นผ๋ฉด
ํ’€์ด๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค.

Details

import java.util.*;

class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        long answer = 0;
        int dIdx = n - 1;
        int pIdx = n - 1;
        
        while (dIdx >= 0 || pIdx >= 0) {
            while (dIdx >= 0 && deliveries[dIdx] == 0) dIdx--;
            while (pIdx >= 0 && pickups[pIdx] == 0) pIdx--;
            
            int distance = Math.max(dIdx, pIdx);
            answer += (long)(distance+1) * 2;
            
            int deliverCap = cap;
            while (cap > 0 && dIdx >= 0) {
                if (deliverCap >= deliveries[dIdx]) {
                    deliverCap -= deliveries[dIdx];
                    deliveries[dIdx] = 0;
                    dIdx--;
                } else {
                    deliveries[dIdx] -= deliverCap;
                    break;
                }
            }
            
            int pickupCap = cap;
            while (pickupCap > 0 && pIdx >= 0) {
                if (pickupCap >= pickups[pIdx]) {
                    pickupCap -= pickups[pIdx];
                    pickups[pIdx] = 0;
                    pIdx--;
                } else {
                    pickups[pIdx] -= pickupCap;
                    break;
                }
            }
        }
        return answer;
    }
}

Copy link
Collaborator

@g0rnn g0rnn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์žฌ๋ฐŒ๋Š” ๋ฌธ์ œ๋„ค์š” ๋ญ”๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ ์ธ ๊ฐœ๋…์ด ํ•„์š”ํ•˜๋‹ค๊ธฐ๋ณด๋‹ค ์•ฝ๊ฐ„์˜ ์„ผ์Šค๋ž‘ ๊ตฌ์ƒํ•˜๊ธฐ ์–ด๋ ค์šด ๋กœ์ง์„ ์‹ค์ˆ˜์—†์ด ๊ตฌํ˜„ํ•ด์•ผํ•ด์„œ ๋” ์žฌ๋ฐŒ์—ˆ๋˜๊ฑฐ ๊ฐ™์•„์š”.

์ €๋„ ๋‹ค๋ฅธ๋ถ„๋“ค์ฒ˜๋Ÿผ ๊ฐ€์žฅ ๋’ค์—์„œ๋ถ€ํ„ฐ ๋ฐฐ๋‹ฌํ•˜๋ฉฐ ์‹œ์ž‘ํ•˜๋ คํ–ˆ์”๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ for(int i = n-1; i >= 0; i--)๋กœ ํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋”๊ตฐ์š”.. ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์ œ ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค..

java code
class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        long answer = 0;
        int totalD = 0;
        int totalP = 0;
        int farHome = 0;
        for (int i = 0; i < n; i++) {
            totalD += deliveries[i];
            totalP += pickups[i];
            if (deliveries[i] != 0 || pickups[i] != 0) {
                farHome = i;
            }
        }
        
        while (!(totalD == 0 && totalP == 0)) {
            int tempDeliverCap = 0;
            int tempPickUpCap = 0;
            int stayIdx = -1;
            
            for (int i = n-1; i >= 0; i--) {
                if (tempDeliverCap < cap && deliveries[i] != 0) {
                    // ๋ชจ๋‘ ๋‚ด๋ ค๋†“๊ธฐ
                    // cap๋ณด๋‹ค ํฌ๋ฉด diff๋งŒํผ ๋Œ๋ ค๋†“๊ณ  temp๋„ ์ˆ˜์ •
                    int curDeliverCap = cap - tempDeliverCap;
                    if (deliveries[i] - curDeliverCap >= 0) {
                        tempDeliverCap += curDeliverCap;
                        deliveries[i] -= curDeliverCap;// ๊ฐ€์ ธ๊ฐ„๋งŒํผ
                    } else {
                        tempDeliverCap += deliveries[i];
                        deliveries[i] = 0;
                    }
                    if (stayIdx < i) {
                        stayIdx = i;
                    }
                }
                
                if (tempPickUpCap < cap && pickups[i] != 0) {
                    int curPickUpCap = cap - tempPickUpCap;
                    if (pickups[i] - curPickUpCap >= 0) {
                        tempPickUpCap += curPickUpCap;
                        pickups[i] -= curPickUpCap;
                    } else {
                        tempPickUpCap += pickups[i];
                        pickups[i] = 0;
                    }
                    if (stayIdx < i) {
                        stayIdx = i;
                    }
                }
                
                if (tempDeliverCap == cap && tempPickUpCap == cap) {
                    break;
                }
            }
            answer += (stayIdx+1) * 2;
            totalD -= tempDeliverCap;
            totalP -= tempPickUpCap;
        }
        
        return answer;
    }
}
image

(7์ดˆ๊ฐ€ ์ง€๋‚˜๋„ ์„ฑ๊ณต์ธ๊ฑธ๋กœ ๋ณด์•„ ์‹œ๊ฐ„์ œํ•œ์€ 10์ดˆ๋กœ ๋„๋„ํ•˜๊ตฐ์š”)

์•„๋ฌดํŠผ ์‹œ๊ฐ„์ดˆ๊ณผ ํ›„ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ์™€ ์ง€ํ”ผํ‹ฐ์˜ ๋„์›€์„ ์‚ด์ง ๋ฐ›์•„ ์ œ ์ฝ”๋“œ์˜ ๋‹จ์ ์„ ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        long answer = 0;
        int d = n - 1;
        int p = n - 1;
        
        while (true) {
            while (d >= 0 && deliveries[d] == 0) d--;
            while (p >= 0 && pickups[p] == 0) p--;
            
            if (d < 0 && p < 0) break;
            
            answer += (Math.max(d, p) * 2L) + 2L;
            
            int capD = cap;
            // ํ˜„์žฌ ์šฉ๋Ÿ‰์„ ๋‹ค ์ฑ„์šธ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
            while (d >= 0 && capD > 0) {
                if (deliveries[d] - capD <= 0) {
                    capD -= deliveries[d];
                    deliveries[d] = 0;
                    d--;
                } else {
                    deliveries[d] -= capD;
                    capD = 0;
                }
            }
            
            int capP = cap;
            while (p >= 0 && capP > 0) {
                if (pickups[p] - capP <= 0) {
                    capP -= pickups[p];
                    pickups[p] = 0;
                    p--;
                } else {
                    pickups[p] -= capP;
                    capP = 0;
                }
            }
        }
        
        return answer;
    }
}

@g0rnn g0rnn merged commit b897940 into main Aug 10, 2025
1 check passed
@g0rnn g0rnn deleted the 31-wnsmir branch August 10, 2025 12:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants