https://school.programmers.co.kr/learn/courses/30/lessons/150369
์ ๊ทผ
์ ๊ทผ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
์๋ณต์ด๊ธฐ ๋๋ฌธ์ ํน์ ์ง์ ๊น์ง ๊ฐ๋ฉด ๊ทธ๋งํผ์ ๋์์์ผํ๋ค
-> ์๋ณตํ ํน์ ์ง์ ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ฌ๋๊ฐ์ผํจ
-> ๋งจ ๋ ์ง ๋ถํฐ ํด๊ฒฐํด๋ฒ๋ฆฌ์.
-> ๋์์๋ถํฐ ํด๊ฒฐ...? 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;
}
'๐ ๋ญ? JS๋ก PS๋ฅผ ํ๋ค๊ณ ?' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] ์์ ์ฐพ๊ธฐ (0) | 2023.06.20 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] ํ๋ ฌ์ ๊ณฑ์ (0) | 2023.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2023.06.05 |
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] [3์ฐจ] n์ง์ ๊ฒ์ (0) | 2023.05.31 |
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (0) | 2023.05.26 |