Dream๐Ÿฐng
article thumbnail

 

์˜ค๋Š˜๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•ด๋ณด๋Š” TIL~๐Ÿ”ฅ

์ดˆ์‹ฌ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋ชจ๋‘ ์ฒ˜์Œ์ด๋ž€ ๋งˆ์Œ๊ฐ€์ง์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด ^_^

 

 

โœ๏ธ ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ

์žฌ๊ท€ ํ•จ์ˆ˜๋ž€?

์žฌ๊ท€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค!

์ˆ˜ํ•™ ์‹œ๊ฐ„์—๋„ ์ž์ฃผ ๋“ฃ๋˜ ๋‹จ์–ด ‘์žฌ๊ท€’… ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‹ถ์ง€ ์•Š์•„์„œ ๋Š˜ ๋ˆˆ ๊ฐ๊ณ  ๊ท€ ๋ง‰๊ณ  ๋ฌด์‹œํ•˜๋˜ ๋‹จ์–ด์˜€๋Š”๋ฐ ใ…‹ใ…‹ใ…‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ค๋Š˜ ๋“œ๋””์–ด ๊ทธ ๋ˆˆ๊ณผ ๊ท€๋ฅผ ์˜คํ”ˆํ–ˆ๋‹ค..

์žฌ๊ท€๋ž€? ์›๋ž˜์˜ ์ž๋ฆฌ๋กœ ๋˜๋Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋˜๋Œ์•„์˜ค๋Š” ๊ฒƒ์œผ๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋ณธ์ธ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฒฐ๊ตญ ๊ณ„์†ํ•ด์„œ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žฌ๊ท€ ํ•จ์ˆ˜์ด๋‹ค!

 

์žฌ๊ท€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๋Š” ์ˆœ์„œ

  1. ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๊ธฐ
  2. ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๊ธฐ
  3. ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž…๋ ฅ ๋ฐ›์€ ์ˆซ์ž num๋ถ€ํ„ฐ 1๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํ•ฉํ•˜๋Š” ํ•จ์ˆ˜ sumTo(num)์„ ์ž‘์„ฑํ•œ๋‹ค๋ฉด!

์ฒซ์งธ๋กœ,

sumTo(5) === 5 + 4 + 3 + 2 + 1 === 5 + sumTo(4)
sumTo(4) === 4 + 3 + 2 + 1 === 4 + sumTo(3)
sumTo(3) === 3 + 2 + 1 === 3 + sumTo(2)
sumTo(2) === 2 + 1 === 2 + sumTo(1);
sumTo(1) === 1

sumTo(num)์€ ์œ„์™€ ๊ฐ™์€ ๋‹จ์œ„์  ํŠน์„ฑ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๋‘˜์งธ๋กœ, ์œ„ ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๊ฒŒ ๋œ๋‹ค๋ฉด, sumTo(1) === 1์ด ๋œ๋‹ค.

์…‹์งธ๋กœ, ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•ด ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด

function sumTo(num) {
	// num์ด 1์ดํ•˜์ผ ๋•Œ num์„ ๋ฆฌํ„ด (num์ด 0์ผ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„)
	if (num <= 1) return num;

	// num + ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๋”ํ•˜๋Š” sumTo ํ•จ์ˆ˜
	return num + sumTo(num-1);
}		

์œ„์™€ ๊ฐ™์€ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์–ธ์ œ ์“ฐ๋‚˜์š”?

  1. ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋น„์Šทํ•œ ๊ตฌ์กฐ์˜ ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์„ ๋•Œ
  2. ์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ์ด ๋งŽ๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋ฌธ์˜ ์ค‘์ฒฉ ํšŸ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šธ ๋•Œ
  3. ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ๋•Œ

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

์žฌ๊ท€์ ์œผ๋กœ ์‚ฌ๊ณ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ž…๋ ฅ๊ฐ’๊ณผ ์ถœ๋ ฅ๊ฐ’์„ ์ •ํ•˜๊ธฐ
  2. ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ
  3. base case ์ƒ๊ฐํ•˜๊ธฐ
  4. recursive case ์ƒ๊ฐํ•˜๊ธฐ
  5. ์ฝ”๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ

 

๐Ÿ‘ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น๊ณผ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์˜ ํ™œ์šฉ

const arr = [1, 2, 3, 4];

๋ผ๋Š” ๋ฐฐ์—ด์ด ์กด์žฌํ•œ๋‹ค๋ฉด,

const [head, ...tail] = arr;

// ์ฐธ๊ณ ๋กœ [...head, tail]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฅผ ์„ ์–ธํ•  ๊ฒฝ์šฐ,

head // arr[0] === 1
tail // arr.slice(1) === [2, 3, 4]

์ด๋‹ค!

Array.prototype.flat();

์ฝ”ํ”Œ๋ฆฟ 15๋ฒˆ ๋ฌธ์ œ๋กœ, ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ 1์ฐจ์› ๋ฐฐ์—ด์˜ ์š”์†Œ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์„ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

์˜ค๋Š˜์€ ๋ฌด์กฐ๊ฑด ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ, ์‚ฌ์‹ค JS ๋‚ด์žฅํ•จ์ˆ˜์ธ flat()์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ์•„์ฃผ ์‰ฌ์›Œ์ง„๋‹ค.. flat()์€ ์ค‘์ฒฉ ๋ฐฐ์—ด์„ ํ‰ํƒ„ํ™” ํ•ด์ฃผ๊ณ , ๋ฐฐ์—ด์˜ ๊ตฌ๋ฉ๊นŒ์ง€ ์ œ๊ฑฐํ•ด์ค€๋‹ค! ๊ฐ“ ๋ฉ”์†Œ๋“œ

const arr = [1, 2, [3, 4, [5, 6]]];

// arr.flat([depth]] depth ๊นŠ์ด๋งŒํผ ํ‰ํƒ„ํ™”ํ•ด์ฃผ๊ณ  ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๋‹ค.
arr.flat(); // [1, 2, 3, 4, [5, 6]]
arr.flat(1); // [1, 2, 3, 4, [5, 6]]
arr.flat(2); // [1, 2, 3, 4, 5, 6]
arr.flat(Infinity); // [1, 2, 3, 4, 5, 6]

const arr2 = [1, 2, 3, ,4];
arr2.flat(); // [1, 2, 3, 4]

 

๐Ÿ™€ ์–ด๋ ค์› ๋˜ ๊ฒƒ

์ผ์ฐจ์›์ ์ธ ์‚ฌ๊ณ ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ๋“ค..

์˜ˆ๋ฅผ ๋“ค๋ฉด ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด๋ผ๋˜๊ฐ€, ๋ชจ๋“  ์š”์†Œ์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ ๋“ฑ๋“ฑ.. ๋‹ค์ฐจ์›์˜ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์€ ์ ‘๊ทผํ•˜๊ธฐ๊ฐ€ ์‰ฌ์› ์ง€๋งŒ

๋ฌธ์ œ ํ›„๋ฐ˜์— ๊ฐ์ฒด ์•ˆ์— ๊ฐ์ฒด, ๋‹ค์ฐจ์› ๋ฐฐ์—ด ๋“ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ ์‰ฝ์ง€ ์•Š์•˜๋‹ค..ใ…  ใ… 

์žฌ๊ท€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋„ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , ๊ทธ ์•ˆ์—์„œ ๋˜ ๋ฆฌํ„ด ์กฐ๊ฑด์„ ์ œ๋Œ€๋กœ ๊ฑธ์–ด์ฃผ์–ด์•ผ ์›ํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค..

 

โœจ ๋А๋‚€์ 

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ๋А๋‚€ ๊ฒƒ์€ base case๋ฅผ ์ž˜ ์„ค์ •ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

base case๋Š” ๊ฒฐ๊ตญ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์— ํƒˆ์ถœ ์กฐ๊ฑด์ด ์ œ๋Œ€๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜๋„ ์žˆ๊ณ … ๊ธฐ๋Œ€๊ฐ’๊ณผ ๋‹ค๋ฅธ ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ …

๋ฌผ๋ก  recursive case๋„ ์ž˜ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•˜์ง€๋งŒ, ํŽ˜์–ด๋‹˜๊ณผ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ณ  ๋‚œ ์†Œ๊ฐ์œผ๋กœ๋Š” base case์˜ ์„ค์ •์ด ์ข€ ๋” ์ค‘์š”ํ•ด๋ณด์˜€๋‹ค!

๊ทธ๋ฆฌ๊ณ  ๋‹ค์ฐจ์›์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„ ๋จธ๋ฆฌ๊ฐ€ ๋ง์„ ์•ˆ๋“ค์–ด์„œ.. ์˜ค๋Š˜ ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ’€์–ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿ˜…

 

profile

Dream๐Ÿฐng

@shoupeach

๐Ÿฐ Happy new rabbit! ๐Ÿฐ

profile on loading

Loading...