๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study/TIL

TIL No.14 ์žฌ๊ท€ํ•จ์ˆ˜์˜ ํ™œ์šฉ

๐Ÿ˜‡๋„‹๋‘๋ฆฌ

๋‚˜ ๊ฐ™์ด ์‹ค๋ ฅ์ด ๋ถ€์กฑํ•œ ์‚ฌ๋žŒ์€ ๋ณธ๋”” ์˜์‚ฌ์ฝ”๋“œ(suedo-code)๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, ๊ทธ๋ฆผ์„ ๊ทธ๋ ค์„œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ์ถฉ๋ถ„ํžˆ ์ƒ๊ฐํ•ด๋ณด๊ณ  ์ฝ”๋“œ๋ฅผ ์งค ํ•„์š”๊ฐ€ ์žˆ๋Š”๋ฐ... ๋ถ„๋ช… ์„น์…˜ 2๊ฐ€ ๋๋‚˜๊ณ  ๊ต‰์žฅํžˆ ์ž์‹ ๊ฐ์žˆ๊ฒŒ ์‹œ์ž‘ํ•œ ์„น์…˜ 3์ธ๋ฐ ๋„ˆ๋ฌด๋‚˜๋„ ์ฒ˜์ฐธํ•œ ๋ชฐ๊ณจ์ด ๋˜์–ด๊ฐ€๊ณ ์žˆ๋‹ค...(๊ณ ์ž‘ 2์ผ์ด ์ง€๋‚ฌ๋Š”๋ฐ ๋‹จ๋‹จํ•œ์ค„ ์•Œ์•˜๋˜ ๋‚ด ๋ฉ˜ํƒˆ์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ถ€์„œ์ ธ์žˆ๋‹ค..ใ…‹ใ…‹ใ…‹ใ…‹)

์žฌ๊ท€ ํŒŒํŠธ๊ฐ€ ์•ž์— ๋†“์—ฌ์ ธ์žˆ๋Š”์ค„ ๋ชจ๋ฅด๊ณ  ๊ธฐ๋ณธ์ ์ธ ์žฌ๊ท€ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ…์„ ๋ณด๋ฉด์„œ ๋ฉฐ์น ์ „์— ๊ณต๋ถ€ํ•œํ„ฐ๋ผ ์•ฝ๊ฐ„ ์ž์‹ ๊ฐ์ด ์žˆ์—ˆ๋Š”๋ฐ...๐Ÿ˜‚(๊ณ ์ž‘ ๋ฉฐ์น  ๋จผ์ € ๋ณธ๊ฑด๋ฐ ์˜ค๋งŒํ•˜๋‹ค ์˜ค๋งŒํ•ด;;)

 

๋ถ„๋ช… ์‰ฌ์šด๋ฌธ์ œ๋“ค์€ ๊ธˆ๋ฐฉ ์ดํ•ดํ•ด์„œ ์Šฅ์Šฅ ํ’€๋ฆฌ๋Š”๋ฐ ์œ„์— ๋งํ•œ๋Œ€๋กœ ์กฐ๊ธˆ๋งŒ ์ฒด๊ณ„์ ์œผ๋กœ ํ’€๋ ค๊ณ ํ•˜๋ฉด ์•„์ง ๋ฌธ์ œํ•ด๊ฒฐ์˜ ๋‚˜๋งŒ์˜ ๊ณต์‹์ด ์ œ๋Œ€๋กœ ์ •๋ฆฝ๋˜์ง€์•Š์•„์„œ ์šฐ์™•์ขŒ์™•ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค.

 

โœ๏ธ์˜ค๋Š˜์˜ ์„œ์ˆ  ํฌ์ธํŠธ!!                                                                                                                

 

1. ์žฌ๊ท€ํ•จ์ˆ˜ ํ™œ์šฉํ•œ ๋ฌธ์ œ 2๋ฌธ์ œ ์˜์‚ฌ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋ฉฐ ์—ฐ๊ฒฐ๋œ ๊ฐœ๋…๊นŒ์ง€ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ

2. ๋ฌธ์ œํ•ด๊ฒฐ๋Šฅ๋ ฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๊ณ ์ฐฐ

3. DOM ํ™œ์šฉ์— ๋Œ€ํ•œ ๋ณต์Šต(์ด๋ผ์“ฐ๊ณ  ๋ฐ˜์„ฑ์ด๋ผ ์ฝ๋Š”๋‹ค)

 

์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ

Q1. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด
์ˆ˜(num)๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ num๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฆฌํ„ดํ•ด์•ผํ•œ๋‹ค.

 

์กฐ๊ฑด

  • ํ•จ์ˆ˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ์€ ๊ธˆ์ง€!!
  • ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

๋จผ์ € ์˜์‚ฌ์ฝ”๋“œ ์—†์ด ์ƒค์ƒฅํ•˜๊ณ  ์ž‘์„ฑํ•œ ๋‚˜์˜ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๊ท€๋‚ฉ์ ์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด์ž.

function fibonacci(num) {
  // num > num๋ฒˆ์งธ ์š”์†Œ
  // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
  // 21 + 34 = 55
  if(num===0) return 0 // ํ”ผ๋ณด๋‚˜์น˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ
  if(num===1) return 1 // ๋‘๋ฒˆ์งธ ์š”์†Œ

  return fibonacci(num-2) + fibonacci(num-1)
}

 

์•„๋ฌด ์ƒ๊ฐ์—†์ด ๋ฐ”๋กœ ์ž‘์„ฑํ•˜์ง€๋Š” ์•Š๊ณ  ์ฃผ์„ 3์ค„์„๋ณด๋ฉด ๋‚˜๋ฆ„ ์ƒ๊ฐ์„ ํ•˜๊ธด ํ–ˆ๋‹ค...

์ผ๋‹จ ์ž…๋ ฅ๊ฐ’์ด ๋ฌด์—‡์ด๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด num์ด ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ num๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฐฉํ–ฅ์€ ์ž˜ ์žก์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ ์„œ๋Š” ์ดˆ๋ฐ˜์— ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์ง„ํ–‰๋˜๋Š” ์ƒํ™ฉ์„ ๋‚˜์—ดํ•ด๋†“๊ณ  3๋ฒˆ์งธ ์ค„์—๋Š” ๋ฆฌํ„ด๊ฐ’์ด ์–ด๋–ค ํ˜•ํƒœ๋ฅผ ๋„์–ด์•ผํ• ์ง€ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ ์–ด๋†“์•˜๋‹ค.

21 + 34 => 55 ์™€ ๊ฐ™์€ ๋‹ต์ด ๋ฆฌํ„ด๋˜๋ ค๋ฉด n-2๋ฒˆ์งธ ์š”์†Œ์™€ n-1๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ์„ ๋ฆฌํ„ดํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌํ•˜์—ฌ return์„ ์ ๊ณ  ํ•จ์ˆ˜ fibonacci์— n-2์™€ n-1์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ•จ์ˆ˜๋ฅผ + ์—ฐ์‚ฐ์ž๋กœ ๋‘˜ ๋‹ค ์‹คํ–‰๋˜๋„๋ก ํ•˜์˜€๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ๋‚˜๋ฆ„ ์ž˜ ํ’€์—ˆ์ง€๋งŒ,, ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚˜์ž๋งˆ์ž ๋ฐ”๋กœ ๋ฐ”๋‹ฅ์ด ๋“œ๋Ÿฌ๋‚ฌ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๋ถ€ํ„ฐ base case, recursive case ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‹ค์‹œ ์˜์‚ฌ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ  ํ”ผ๋ณด๋‚˜์น˜๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด์„œ ๊ณ„์‚ฐ๋ณต์žก๋„(big O)๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ ๋’ค, ๋” ์–ด๋ ค์šด ๋ฌธ์ œ์—๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜์‚ฌ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ๋‹ค.

 

์ผ๋‹จ, base case๋ž€ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์ข…๋ฃŒ๋˜๋Š” ์กฐ๊ฑด์œผ๋กœ... ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋œ 5,6๋ฒˆ์งธ ์ค„์„ ์••์ถ•ํ•˜๋ฉด

if(n <= 1) return n;

์ด๋ ‡๊ฒŒ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์™€ ๋‘๋ฒˆ์งธ ์š”์†Œ์˜ ๊ฐ’์ด ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ n๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉฐ ์ข…๋ฃŒํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ fibonacci(0), fibonacci(1) ์ด๋ ‡๊ฒŒ ์ž…๋ ฅ๋˜๋ฉด 0๊ณผ 1์„ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” ์ด ๋‘ ๊ฐ€์ง€๋งŒ ์žˆ์œผ๋ฉด ๋ญ๋“ ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ recursive case ์ฆ‰, ๋ฐ˜๋ณต ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž. base case์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋™์ผํ•œ ์ธ์ž๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ์•ˆ๋  ๊ฒƒ์ด๊ณ  ์ ์  base case์— ์ ‘๊ทผํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•œ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜์˜ ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ๊ตฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์ด 10๋ฒˆ์งธ๋ผ๊ณ ํ•œ๋‹ค๋ฉด 10๋ฒˆ์งธ๋Š” 8๋ฒˆ์งธ์™€ 9๋ฒˆ์งธ์˜ ํ•ฉ์ด๊ณ  ์ด๋ฅผ ์‹์œผ๋กœ ํฌํ˜„ํ•˜๋ฉด 
'ํ•จ์ˆ˜ fibonacci์— n-2์™€ n-1์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ•จ์ˆ˜'๋ผ๊ณ  ์ ์—ˆ๋˜ ๋ถ€๋ถ„์ด๋‹ค.

fibonacci(n) === fibonacci(n-1) + fibonacci(n-2)

fibonacci(10) === fibonacci(9) + fibonacci(8)
fibonacci(9)๋Š” 8,7๋ฒˆ์งธ ์š”์†Œ์˜ ํ•ฉ์œผ๋กœ ๋‚˜๋‰˜๊ณ  8์€ 6,7๋ฒˆ์งธ ์š”์†Œ์˜ ํ•ฉ์œผ๋กœ ๋‚˜๋‰˜๋ฏ€๋กœ, ์ด๋ฅผ ์‹๊ณผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด

fibonacci(10) === fibonacci(9) + fibonacci(8) === fibonacci(8) + fibonacci(7) + fibonacci(7) + fibonacci(6) ...

 

 

์ด๋ ‡๊ฒŒ base case๊ฐ€ ์žˆ๋Š” ๋ฐ”๋‹ฅ๊นŒ์ง€ ๋„๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

์•„๋ฌด์ƒ๊ฐ์—†์ด ์ง  4์ค„์˜ ์ฝ”๋“œ์˜ ์ž‘๋™์„ ์„ค๋ช…ํ•˜๋Š”๋ฐ ๊ฝค๋‚˜ ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.(์‚ฌ์‹ค ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด๋‚˜ ๊ฐœ๋…๋“ค์€ ํ›จ์”ฌ ๋ณต์žกํ•˜๋ฏ€๋กœ ์ด์ •๋„๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.)

 

๋‹ค๋ฅธ ํ’€์ด๋ฒ• ์•Œ์•„๋ณด๊ธฐ

์ˆ˜์š”์ผ๊ณผ ๋ชฉ์š”์ผ์— ํ’€์–ด์•ผํ•˜๋Š” ์ฝ”ํ”Œ๋ฆฟ๋ฌธ์ œ์™€๋„ ์—ฐ๊ด€์ด ์žˆ๋Š”๋ฐ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ๊ณ„์‚ฐ ๋ณต์žก๋„๋ฅผ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•ด๋ณด์ž.

 

1. ๋™์  ๊ณ„ํš๋ฒ•์— ๋”ฐ๋ฅธ big-O ์ค„์ด๊ธฐ
https://velog.io/@polynomeer/%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95Dynamic-Programming

 

2. ๊ผฌ๋ฆฌ์žฌ๊ท€ํ•จ์ˆ˜

 

๊ผฌ๋ฆฌ์žฌ๊ท€ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ณต๋ถ€๋„ ๋ถ€์กฑํ•˜๊ณ  ๋ฌด์—‡๋ณด๋‹ค๋„ ํ˜„์žฌ Javascript์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‹ค์Œ์— ๊ธฐํšŒ๊ฐ€๋˜๋ฉด ๋‹ค๋ค„๋ณด๊ธฐ๋กœ ํ•˜๊ณ , ๋™์ ๊ณ„ํš๋ฒ•์„ ํ™œ์šฉํ•˜๋ฉด ํ•œ๋ฒˆ ๊ณ„์‚ฐํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ธฐ์–ตํ•ด๊ฐ€๋ฉด์„œ call stack์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ์ด๋Š” ๊ณ„์‚ฐ ๋ณต์žก๋„ ๊ฐ์†Œ๋กœ ์ด์–ด์ง„๋‹ค.

 

์ž์„ธํ•œ ์ฝ”๋“œ๋Š” ๋‚ด์ผ TIL์— ๋™์ ๊ณ„ํš๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ๋” ์ ์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

๋‘๋ฒˆ์งธ ๋ฌธ์ œ

Q2. flattenArr
๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์กฐ๊ฑด

  • ํ•จ์ˆ˜ flattenArr๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Array Method flat()๊ณผ flatMap() ์‚ฌ์šฉ์€ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ(for, while) ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋’ค์—๋„ ์ฒ˜์Œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(immutability).
  • ์ž…๋ ฅ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด ์ค‘์ฒฉ๋œ ์ •๋„(์ค‘์ฒฉ์˜ ๊นŠ์ด)๋Š” ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋นˆ ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ, ๋นˆ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜์‚ฌ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๋จผ์ € ๋ฌธ์ œ์— ์ œ์‹œ๋œ ํ•จ์ˆ˜์˜ ์ด๋ฆ„๊ณผ ์กฐ๊ฑด์„ ์‚ดํŽด๋ณด๋ฉด, flat์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.(๋‚˜๋Š” ๋ชฐ๋ž๋‹ค...)

 

flat์€ ๋ณต์‚ฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ์„œ ์›๋ณธ์„ ํ•ด์น˜์ง€ ์•Š๊ณ  ()์•ˆ์— ์ฃผ์–ด์ง„ ์ „๋‹ฌ์ธ์ž์˜ ๊ฐ’๋งŒํผ ๋‚ฎ์€ ์ฐจ์›์˜ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹๋ฌธ์„œ์— ๋” ์ž˜ ์“ฐ์—ฌ์žˆ๋‹ค.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

 

Array.prototype.flat() - JavaScript | MDN

The flat() method creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.

developer.mozilla.org

์šฐ๋ฆฌ๋Š” ์กฐ๊ฑด์— ์ฃผ์–ด์ง„๋Œ€๋กœ flat๊ณผ flatMap ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ , ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋‹ค. immutability ์—ญ์‹œ ์ง€์ผœ์•ผํ•˜๋ฉฐ ๋นˆ ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฝ์šฐ ๋นˆ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

์˜์‚ฌ์ฝ”๋“œ

1. ๋‹ค์ฐจ์›์˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ , ์š”์†Œ ์ค‘์—๋„ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ๊ฐ๊ฐ์˜ ์š”์†Œ์˜ ๋ฐฐ์—ด [ ]๋ฅผ ๋‹ค ํ’€๊ณ  1์ฐจ์› ๋ฐฐ์—ด์•ˆ์— ์–‘์˜์ •์ˆ˜๋“ค์ด ๋‚˜์—ด๋œ ๋ฐฐ์—ด์„ ์ตœ์ข…๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•ด์•ผํ•œ๋‹ค.

2. base case๋Š” ๋ฐฐ์—ด์•ˆ์˜ ์š”์†Œ ์ค‘์— ๋ฐฐ์—ด์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹น ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

3. recursive case๋Š” for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์•ˆ์˜ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฐฐ์—ด์„ ๋งŒ๋‚  ๊ฒฝ์šฐ ๋ฐฐ์—ด์„ ํ•œ ์ฐจ์› ๋‚ฎ์ถ˜๋‹ค.

3-2. ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋‚œ ๊ฒฝ์šฐ ํ•œ๋ฒˆ์— 0์ฐจ์› ์–‘์˜์ •์ˆ˜ ์š”์†Œ๋กœ ๋งŒ๋“ค์–ด๋„ ๋˜์ง€๋งŒ ์ด๋ฒˆ์— ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋”ฐ๋ฅด๋ฉด ๋ฐฐ์—ด์ด ์ค‘์ฒฉ๋œ ์ˆ˜์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ ์ด ๋ฐฉ์‹์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

4. ํ•จ์ˆ˜ ๋งจ ์ฒ˜์Œ์— ๋นˆ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ  for๋ฌธ์ด ๋‹ค ์ข…๋ฃŒ๋œ ํ›„์— ๋นˆ ๋ฐฐ์—ด์— ์ถ”๊ฐ€๋œ ์š”์†Œ๋“ค์„ ์ตœ์ข…์ ์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

 

์ด ๋•Œ ์˜๋ฌธ์ด ๋“œ๋Š” ์ง€์ ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๊ณผ์—ฐ flattenArr() ์ด ํ•จ์ˆ˜๋Š” ์–ธ์ œ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด์•ผํ•˜๋Š”๊ฐ€์ด๋‹ค. ์ด๋Š” ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‹จ์ˆœํ•˜๋‹ค. ์–ด๋–ค ํ–‰์œ„๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด์„œ ์–ด๋–ค ์ƒํƒœ๋กœ ๋‚˜์•„๊ฐ€์•ผ ํ•˜๋Š”๊ฐ€๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋œ๋‹ค. ๋ฐฐ์—ด์ด ๊ฒน๊ฒน์ด ์‹ธ์—ฌ ์žˆ๋Š” ๊ฒƒ์„ ์ ์  ์ค„์—ฌ์„œ ์–‘์˜์ •์ˆ˜๋งŒ ๋‚จ๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. ๋ง๊ทธ๋Œ€๋กœ recursive case์˜ ๋ฐ˜๋ณต์„ ํ†ตํ•ด base case์— ๋‹ค๋‹ค๋ฅด๋Š” ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”ผ๋ณด๋‚˜์น˜๋ณด๋‹ค ์ข€ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋А๊ปด์ง€๋Š” ์ด ๋ฌธ์ œ๋„ ๊ฝค ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
 recursive case๊ฐ€ for๋ฌธ ์•ˆ์— ์žˆ๊ณ (์ •ํ™•ํžˆ๋Š” for๋ฌธ์˜ ์ผ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•ด์•ผ๊ฒ ๋‹ค.) ๋ฐฐ์—ด์„ ๋งŒ๋‚˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ์กฐ๊ฑด์ด๋ฏ€๋กœ for ๋ฌธ ์•ˆ์—์„œ ์ˆœํšŒ๋ฅผ ๋Œ๊ณ  ์žˆ๋Š” ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ๋ถ„๊ธฐ๋ฅผ ๋‚˜๋ˆ„์–ด์ฃผ์–ด์•ผํ•˜๋ฉฐ, ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ์— ๋‹ค์‹œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ํ•˜๊ณ  ์ˆœํšŒ๋ฅผ ๋„๋Š” ์š”์†Œ๊ฐ€ ์ „๋ถ€ ์–‘์˜ ์ •์ˆ˜์ธ ๊ฒฝ์šฐ for๋ฌธ์ด ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ for ๋ฌธ ๋‹ค์Œ์— ์žˆ๋Š” ์ตœ์ข… ๋ฆฌํ„ด๋ฌธ์ด ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.