42885. ๊ตฌ๋ช ๋ณดํธ
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๊ตฌ๋ช ๋ณดํธ
๋ฌธ์ ์ ํ | ๋์ด๋ | ๊ฑธ๋ฆฐ ์๊ฐ | ํด๊ฒฐ ์ ๋ฌด(โ /โ) |
---|---|---|---|
ํ์๋ฒ(๊ทธ๋ฆฌ๋) | lv.2 | 1์๊ฐ 30๋ถ | โ |
#
์ค๊ณ ๋ฐฉ๋ฒ์ฌ๋๋ค์ ๋ชธ๋ฌด๊ฒ๊ฐ ๋ฌด๊ฑฐ์ด ์์ผ๋ก ์ ๋ ฌํ๋ค.
๋ฌด๊ฑฐ์ด ๋ชธ๋ฌด๊ฒ์ ์ฌ๋๋ถํฐ
๋ณดํธ์ย
limit
ย ์์ ๋ชธ๋ฌด๊ฒ๋ฅผ ๋บ ๋งํผ์ยremainig
(๋จ์ ๋ฌด๊ฒ)์ ์ ์ฅํ๋ค.๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ฌ๋์ ๋ชธ๋ฌด๊ฒ๊ฐย
remaining
ย ๊ณผ ๊ฐ๊ฑฐ๋ ์๋ค๋ฉด,๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ฌ๋์ ๋ชธ๋ฌด๊ฒ๋งํผ์ย
remainig
์์ ๋นผ์ค๋ค.๋ณดํธ์ย
remainig
ย ์ push ํ๋ค.boats
์๋ ์ฌ๋์ ์ฃ๊ณ ๋จ์ ๋ฌด๊ฒ๋ค์ด ์ ์ฅ๋์ด ์๊ณ , ๊ทธ ๊ธธ์ด๋ฅผ ๋ฆฌํดํ๋ฉด ์ต์๊ตฌ๋ช ๋ณดํธ์ ๊ฐ์์ด๋ค.
#
์ฝ๋function solution(people, limit) { const boats = [];
people .sort((a, b) => b - a) .forEach((heavyPerson) => { let remaining = limit - heavyPerson;
if (people[people.length - 1] <= remaining) { remaining -= people.pop(); }
boats.push(remaining); });
return boats.length;}
#
์๊ฐ ๋ณต์ก๋sort : O(NlogN)
์ํ : O(N)
-> O(NlogN)
#
์ด๋ ค์ ๋ ์ ๋ฌธ์ ๋ฅผ ์ฒ์์ ์ ๋๋ก ์ฝ์ง ์์์, ๋ณดํธ์ ์ฌ๋ ์ ์ ํ์ ์๊ณ , ๋ฌด๊ฒ ์ ํ๋ง ์๋์ค ์์๋ค.
๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ด ์ฝ์ง ์์๋ค.
์ ๋ ฌ์ ํ๋ ๊ฒ์ด ์ค์ํ๋๋ฐ, ์ด๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ ์ด๋ ค์ ๋ค.
sort().revers() ๋ก ์ซ์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์ ์๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋๋ฐ, sort()๊ฐ ์ ๋์ฝ๋ ์์ผ๋ก ์ ๋ ฌํ์ฌ, [1, 2, 10]์ ๊ฒฝ์ฐ [1, 10, 2] ๋ก ์ ๋ ฌ๋๋ค๋๊ฒ์ ์๋กญ๊ฒ ์๊ฒ ๋์๋ค.