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] ๋ก ์ ๋ ฌ๋๋ค๋๊ฒ์ ์๋กญ๊ฒ ์๊ฒ ๋์๋ค.