programmers.co.kr/learn/courses/
ํ๋ก๊ทธ๋๋ฐ ๊ฐ์
๊ธฐ์ด๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ, ์ง์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์ธ์.
programmers.co.kr
ํ์๋ฒ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
ํ์๋ฒ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ ๋ฌธ์ . ํ์๋ฒ(Greedy Algorithm)์ ๋์ ํ๋ก๊ทธ๋๋ฐ(๋๋ ๋์ ๊ณํ๋ฒ, Dynmaic Programming) ์ฌ์ฉ ์ ์ง๋์น๊ฒ ๋ง์ ์ผ์ ํ๋ค๋ ๊ฒ์์ ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋ค. ๋ ๋ฐฉ๋ฒ์ ์๋ก ์ฐจ์ด์ ์ด ์กด์ฌํ๋ฉฐ, ๋ณด์ํ๋ ๋ฐฉ์์ผ๋ก ํ์ฉ์ด ๋๋ค๊ณ ํ๋ค.
๋์ ๊ณํ๋ฒ์ ์ ์ฒด ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ํ์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ด ํ๊ณ , ํ์ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฒฐํฉํด ์ต์ข ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ํผ๋ณด๋์น์ ์์ด์ด ๋ํ์ ์ธ ์์ด๋ค. ์ด๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ํจ์จ์ ์ํด ํจ์ ๊ฒฐ๊ณผ ๊ฐ์ ์ ์ฅํ๋ฉฐ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ์ฐพ๋๋ค. ๋๋ฆ ๊ณ์ฐ ํ์๋ฅผ ์ค์ฌ๋๊ฐ๋ฏ๋ก, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด, ๋ถ๋ถ์งํฉ์ ํฉ, ๋ฐฐ๋ญ ๋ฌธ์ ๋ฑ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
ํ์๋ฒ์ ๋ํ์ ์ธ ์์ ๋ ํ๋ ์ ํ ๋ฌธ์ (Activity Selection Problem)๊ฐ ์๋ค. ํ ๋ฒ์ ํ๋์ ํ๋๋ง ํ ์ ์๋ ๊ฐ์์ค์์ ์ ์๋ ํ๋ ์ค ๊ฐ์ฅ ๋ง์ ํ๋์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์๊ฐํ๋ฅผ ์ง๋ ๋ฌธ์ ์ด๋ค. ๊ฐ์ฅ ๋จผ์ ๋๋๋ ํ๋์ ํํ๋ฉด, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต๋ํ ๋ง์ ํ๋์ ์๊ฐํ์ ๋ฃ์ ์ ์๋ค.
ํ์๋ฒ์ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์์ ๊ทธ ์๊ฐ ์๊ฐ ์ต์ ์ ์ ํ์ด๋ผ๋, ์ฆ ๊ฐ์ฅ ์ข์๋ณด์ด๋ ์ ํ์ ์ทจํ๋ฉฐ ์ต์ข ํด๋ต์ ๋๋ฌํ๋ค. ์ฆ, ์์ผ๋ก์ ์ ํ์ด๋ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๊ณ ๋ คํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ์๋ฒ์ผ๋ก ๋์ถ๋ ํด๊ฐ ๋ฐ๋์ ์ต์ ์ ํด๋ผ๋ ๋ณด์ฅ์ ์๋ค. ๋์ ๊ณ์ฐ ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ฌธ์
์ ๋ฌธ์ ๋ ์ ์ฒด ํ์ ์ n, ์ฒด์ก๋ณต์ ๋๋ ๋นํ ํ์๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด lost, ์ฌ๋ฒ ์ฒด์ก๋ณต์ด ์๋ ํ์๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด reserve๊ฐ ์ฃผ์ด์ง๋ค. ์ฒด์ก๋ณต์ด ์์ด์ผ ์ฒด์ก ์์ ์ ๋ฃ๋๋ค ํ์ ๋ ์ฒด์ก ์์ ์ ๋ค์ ์ ์๋ ์ต๋ ํ์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค. ์ต๋ํ ๋ง์ ํ์๋ค์ด 1๋ฒ ์ด์์ ์ฒด์ก๋ณต์ ๊ฐ๋๋ก ๋ถ๋ฐฐ ํด์ผ ํ๋ค.
์ฝ๋
ํ์ด
์ฐ์ ๊ฐ ํ์๋ค์ด ๋ชจ๋ 1๋ฒ์ ์ฒด์ก๋ณต์ ๊ฐ๋๋ค๊ณ ๊ฐ์ ํ๊ณ , ๋๋ ๋นํ ํ์์ -1๋ฒ, ์ฌ๋ฒ์ด ์๋ ๊ฒฝ์ฐ๋ +1๋ฒ๋ก ์กฐ์ ํด์ฃผ๊ธฐ๋ก ํ๋ค. ES6์ ์ถ๊ฐ๋ ๋ฌธ๋ฒ์ธ fill() ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค. Array(n).fill(1)
๋ n๊ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ๋ฐฐ์ด์ fill()
์ ์ธ์๋ก ๋ค์ด์จ 1์ด๋ผ๋ ์ซ์๋ฅผ ๊ฐ ์์๋ก ํด์ค๋ค. indexOf()
๋ฅผ ํตํด ๋ฐฐ์ด ๋ด ํด๋น ํ์ ๋ฒํธ๊ฐ ์กด์ฌํ๋ฉด, ํ์๋ค์ ์ฒด์ก๋ณต ๊ฐ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ธ students์ ์์๋ฅผ ์กฐ์ ํ๋ค.
๋ ๋ฒ์งธ for๋ฌธ์ for of
๋ฅผ ์ฌ์ฉํ๋ค. ๋น๊ตฌ์กฐํ ํ ๋น(destructuring assignment)๋ฅผ ์ฌ์ฉํ๋ค. Array.prototype.entries()
๋ ๋ฐฐ์ด์ ๊ฐ ์ธ๋ฑ์ค์ ๋ํด Key/Value ์์ ์๋ก์ด Array Iterator ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. let [index, curr] of students.entries()
๋ก students ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ value(note: curr๋ผ๊ณ ๋ค์ด๋ฐํ ๊ฒ์ฒ๋ผ, ์ด๋ฆ์ ๋ฌด๊ดํ๋ค. index, value ์์ด๋ค.)๋ฅผ ๋ณ์์ ์ ์ธํ๋ค.
๋ง์ผ ํ์ฌ ๊ฐ(curr)์ด 0์ผ ๋, ๋ค์ ๋ฒ ํ์์ ์ฒด์ก๋ณต ๊ฐ์๊ฐ 2๋ฒ ์ด์์ผ ๋, students์ ํด๋น ํ์๋ค์ ์ฒด์ก๋ณต ๊ฐ์๋ฅผ ์กฐ์ ํด์ค๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ๊ฐ๊ณผ ์ด์ ๊ฐ์ ๋น๊ตํด์ฃผ๋ ๋ก์ง์ ํ ๋ฒ ์ฌ์ฉํ๋ค.
์ดํ Array.filter ํจ์๋ฅผ ํตํด students ๋ฐฐ์ด์ ์์๊ฐ 1์ด์์ธ ๊ฒฝ์ฐ์ ๊ธธ์ด๋ฅผ ๊ตฌํด ๋ฐํํ๋ค.
์ฐธ๊ณ
- doorbw.tistory.com/75
- ์๊ณ ๋ฆฌ์ฆ #10_ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy algorithm): ํ๋ ์ ํ ๋ฌธ์
- Array.protoytpe.entries()