๐Ÿ‘’ ๋ญ? JS๋กœ PS๋ฅผ ํ•œ๋‹ค๊ณ ?

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][JS / Javascript] ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ

์„ ๋‹ฌ 2023. 6. 6. 23:14
๋ฐ˜์‘ํ˜•

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

์ ‘๊ทผ

์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์™•๋ณต์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์ง€์ ๊นŒ์ง€ ๊ฐ€๋ฉด ๊ทธ๋งŒํผ์„ ๋Œ์•„์™€์•ผํ•œ๋‹ค

-> ์™•๋ณตํ•  ํŠน์ • ์ง€์ ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ค„์—ฌ๋‚˜๊ฐ€์•ผํ•จ

-> ๋งจ ๋ ์ง‘ ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•ด๋ฒ„๋ฆฌ์ž.

-> ๋์—์„œ๋ถ€ํ„ฐ ํ•ด๊ฒฐ...? Stack์„ ์‚ฌ์šฉํ•˜์ž!

 

์˜ˆ์ œํ’€์ด

๋ณธ ํ’€์ด๋ฅผ ์˜ˆ์ œ์— ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

#์˜ˆ์ œ1

[1 0 3 1 2]

[0 3 0 4 0]

 

5๋ฒˆ์ง‘๊นŒ์ง€ ๋‹ค๋…€์˜จ๋‹ค (ans+=5)

 

[1 0 2]

[0 3]

 

3๋ฒˆ์ง‘๊นŒ์ง€ ๋‹ค๋…€์˜จ๋‹ค (ans+=3)

 

[]

[]

 

ans = 8

ans*2 = 16

 

#์˜ˆ์ œ2

[1 0 2 0 1 0 2]

[0 2 0 1 0 2 0]

 

7๋ฒˆ์ง‘๊นŒ์ง€ ๋‹ค๋…€์˜จ๋‹ค

 

[1 0 2 0 1]

[0 2 0 1]

 

5๋ฒˆ์ง‘๊นŒ์ง€ ๋‹ค๋…€์˜จ๋‹ค

 

[1 0 1]

[0 1]

 

3๋ฒˆ์ง‘๊นŒ์ง€ ๋‹ค๋…€์˜จ๋‹ค

 

[]

[]

 

ans = 7+5+3 = 15

ans*2 = 30

 

 

ํ’€์ด

deliveries ๋ฐฐ์—ด์˜ ๋งจ ๋๋ถ€ํ„ฐ ์ œ๊ฑฐ(pop)ํ•˜๋ฉฐ (๋ฐฐ๋‹ฌ์ด ์™„๋ฃŒ๋œ ์ง‘์€ ๋ฐฐ์—ด์—์„œ ์‚ฌ๋ผ์ง„๋‹ค)

box(์ž„์‹œ ๋ณ€์ˆ˜)์— ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค. (ํŠธ๋Ÿญ์— ๋ฐ•์Šค๋ฅผ ์‹ฃ๋Š” ๊ณผ์ •์— ๋น„์œ  ๊ฐ€๋Šฅํ•˜๋‹ค)

์ด box๊ฐ€ cap์„ ๋„˜๋Š”๋‹ค๋ฉด ์ดˆ๊ณผํ•œ ๋งŒํผ ๋ฑ‰๋Š”๋‹ค(push). (์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ๋ฐฐ๋‹ฌ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.)

deliveries ๋ฐฐ์—ด์ด ๋น„์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ๋„ breakํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ์ž. (๋ชจ๋“  ์ง‘์„ ๋ฐฐ๋‹ฌ ์™„๋ฃŒ ํ•œ ๊ฒฝ์šฐ๋‹ค)

    while(deliveries.length!==0 || pickups.length!==0) { 
        while(deliveries.length!==0) {
            box += deliveries.pop();
            if(box > cap) {
                deliveries.push(box-cap)
                break;
            };
        }

 

๋ณธ ๊ณผ์ •์„ pickups์—๋„ ์ ์šฉํ•œ๋‹ค.

        box = 0;
        while(pickups.length!==0) {
            box += pickups.pop();
            if(box > cap) {
                pickups.push(box-cap)
                break;
            };
        }

 

 

๋งค ๋ฃจํ”„๋งˆ๋‹ค(ํ•œ๋ฒˆ ์ถœ๋ฐœํ•  ๋•Œ๋งˆ๋‹ค)

๋‚จ์€ ์ง‘์˜ ๊ฐฏ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ans์— ๋”ํ•ด์ค€๋‹ค (ans += Math.max(deliveries.length, pickups.length))

        ans += distance;
        distance = Math.max(deliveries.length, pickups.length);

 

ans์˜ ๋‘๋ฐฐ๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋! (์™•๋ณต์ด๋‹ˆ๊นŒ!)

return ans*2;

 

๊ทผ๋ฐ ์ด์ œ... ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 2๋ฒˆ๋งŒ ํ‹€๋ ธ๋‹ค๊ณ  ๋œจ๊ฒŒ๋œ๋‹ค.

๋ณธ ํ’€์ด๋Š” ๋ฌด์กฐ๊ฑด ๋งจ ๋ ์ง‘์„ ๋“ค๋ฆฌ๋Š”๊ฑธ ๊ฐ€์ •ํ•˜๋Š”๋ฐ,

์ฃผ์–ด์ง„ ์ž…๋ ฅ์˜ ๋งจ ๋ ์ง‘์— ์ˆ˜๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐ๋‹ฌํ•  ๋ฐ•์Šค๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—๋„ ์ด ์ง‘์„ ๋“ค๋ฆฌ๋Š” ๊ฑธ๋กœ ์นด์šดํŠธ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ž…๋ ฅ์„ ์กฐ๊ธˆ ๊น”๋”ํ•˜๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…๋„ ํ•จ๊ฒŒ ์ง„ํ–‰ํ•˜์ž. (๋‘˜๋‹ค ๋งจ ๋์ด 0์ด๋ฉด ๊ทธ๋ƒฅ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฐ๋‹ค)

    while(deliveries[n-1]===0 && pickups[n-1]===0) {
        deliveries.pop();
        pickups.pop();
        n--;
    }

 

์ฝ”๋“œ

function solution(cap, n, deliveries, pickups) {
    let ans = 0;
    let box = 0;
    while(deliveries[n-1]===0 && pickups[n-1]===0) {
        deliveries.pop();
        pickups.pop();
        n--;
    }
    let distance = n;
    while(deliveries.length!==0 || pickups.length!==0) { 
        while(deliveries.length!==0) {
            box += deliveries.pop();
            if(box > cap) {
                deliveries.push(box-cap)
                break;
            };
        }
        box = 0;
        while(pickups.length!==0) {
            box += pickups.pop();
            if(box > cap) {
                pickups.push(box-cap)
                break;
            };
        }
        box = 0;
        ans += distance;
        distance = Math.max(deliveries.length, pickups.length);
    }
    
    return ans*2;
}
๋ฐ˜์‘ํ˜•