๐Ÿ‘ฉ‍๐Ÿ’ป/JavaScript

[Programmers] JavaScript, ํƒ์š•๋ฒ•, ์ฒด์œก๋ณต ๋ฌธ์ œ (Destructuring Assignment/fill)

ํ•œ๋‚˜ 2021. 3. 1. 17:35

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์ด์ƒ์ธ ๊ฒฝ์šฐ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฐธ๊ณ