๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
the others/Algorithm

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ ํ’€์ด

by ciocio 2021. 10. 12.

๐Ÿ“Œ  ๋ฌธ์ œ

 

โ—พ  ํ•ด์„ค

 

Finn์€ ํŽธ์˜์ ์—์„œ ์•ผ๊ฐ„ ์•„๋ฅด๋ฐ”์ดํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ผ๊ฐ„์— ์†๋‹˜์ด ๋„ˆ๋ฌด ์—†์–ด ์‹ฌ์‹ฌํ•œ Finn์€ ์†๋‹˜๋“ค๊ป˜ ๊ฑฐ์Šค๋ฆ„๋ˆ์„ n ์›์„ ์ค„ ๋•Œ ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์†๋‹˜๊ป˜ 5์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•˜๊ณ  1์›, 2์›, 5์›์ด ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ 5์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 1์›์„ 5๊ฐœ ์‚ฌ์šฉํ•ด์„œ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค.
  • 1์›์„ 3๊ฐœ ์‚ฌ์šฉํ•˜๊ณ , 2์›์„ 1๊ฐœ ์‚ฌ์šฉํ•ด์„œ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค.
  • 1์›์„ 1๊ฐœ ์‚ฌ์šฉํ•˜๊ณ , 2์›์„ 2๊ฐœ ์‚ฌ์šฉํ•ด์„œ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค.
  • 5์›์„ 1๊ฐœ ์‚ฌ์šฉํ•ด์„œ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค.

๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•˜๋Š” ๊ธˆ์•ก n๊ณผ Finn์ด ํ˜„์žฌ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ๋ˆ์˜ ์ข…๋ฅ˜ money๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, Finn์ด n ์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

 

โ—พ  ์ œํ•œ ์‚ฌํ•ญ

 

  • n์€ 100,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ํ™”ํ ๋‹จ์œ„๋Š” 100์ข…๋ฅ˜ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํ™”ํ๋Š” ๋ฌดํ•œํ•˜๊ฒŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •๋‹ต์ด ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ, 1,000,000,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ return ํ•ด์ฃผ์„ธ์š”.

 

โ—พ  ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

n money result
5 [ 1, 2, 5 ] 4

 

 

๐Ÿ“Œ  ๋‚ด ํ’€์ด

 

๊ทœ์น™ ์ฐพ๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ๋‹ค ์ผ๋‹ค ...

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ์•„์˜ˆ ๊ณต๋ถ€๋ฅผ ํ•ด๋ฒ„๋ ธ๋‹ค ใ…Ž

 

๐Ÿ“  Dynamic Programming ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

2021.10.11 - [๊ฐœ๋ฐœ ๊ณต๋ถ€/Algorithm] - Dynamic Programming ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

Dynamic Programming ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿ“Œ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ? ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•ด์„œ ๋™์ ์œผ๋กœ ?!? ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค ใ…‹ใ…‹ใ…‹ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฒ•์„ ๋งํ•œ๋‹ค. -> ๊ทธ๋Ÿผ ๋ถ„ํ•  ์ •๋ณต ์•„๋‹Œ๊ฐ€ ?

code-designer.tistory.com

 

 

๐Ÿ“Œ  ์ฝ”๋“œ ๊ณต๋ถ€

 

 

์ฒ˜์Œ ๋ฌธ์ œ์— ์ ‘๊ทผํ•  ๋•Œ, fix๋˜๋Š” ๊ฐ’์€ ์žˆ์–ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

๊ธฐ์ค€์ด ์žˆ์–ด์•ผ ๊ธฐ์ค€์„ ์ค‘์‹ฌ์œผ๋กœ ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ ์กฐํ•ฉํ•ด ์›ํ•˜๋Š” ํ•ฉ์„ ๋„์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ.

๊ทธ๋Ÿฐ๋ฐ ์กฐํ•ฉ์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๊ณ  ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ํ•ฉ์„ ๋˜ ๊ตฌํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ ๋„ˆ๋ฌด ๋ง‰๋ง‰ํ–ˆ๋‹ค.

-->  ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‚ฌ๊ณ ์˜ ํšŒ๋กœ๊ฐ€ ๊ผฌ์ธ๋“ฏ

 

์ผ๋‹จ ๊ธฐ์ค€์ด ๋˜๋Š” ์ˆ˜๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ทœ์น™(?)์„ ๋ถ„์„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

n (์›ํ•˜๋Š” ํ•ฉ) ์„ ์™ผ์ชฝ์— ์ •๋ ฌํ•˜๊ณ , 1 2 3 --- ๊ธฐ์ค€์„ ๋‚˜์—ดํ•ด ๋ฐ˜๋ณต๋˜๋Š” ํŠน์„ฑ์„ ์ฐพ์•„๋ณด์•˜๋‹ค.

 

1์€ ๋ฐ”๋กœ        ์ „ ์ˆ˜์— 1์„ ๊ณ„์† ๋”ํ•ด๋‚˜๊ฐ€๋Š” ํŠน์„ฑ์ด ์žˆ์—ˆ๊ณ ,

2๋Š” ๋ฐ”๋กœ    ์ „์ „ ์ˆ˜์— 2๋ฅผ ๊ณ„์† ๋”ํ•ด๋‚˜๊ฐ€๋Š” ํŠน์„ฑ์ด ์žˆ์—ˆ๊ณ ,

3์€ ๋ฐ”๋กœ ์ „์ „์ „ ์ˆ˜์— 3์„ ๊ณ„์† ๋”ํ•ด๋‚˜๊ฐ€๋Š” ํŠน์„ฑ์ด ์žˆ์—ˆ๋‹ค.  

 

 

๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์–ด๋–จ๊นŒ ?

์šฐ๋ฆฐ ํ•ฉ 5๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” [ 1, 2, 5 ] ๊ฐ„ ์กฐํ•ฉ๋œ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค.  ->  ์กฐํ•ฉํ•˜๊ณ  ์‹ถ์€ ์ˆซ์ž๊ฐ€ ์ •ํ•ด์ ธ์žˆ์Œ์„ ์žŠ์ง€ ๋ง์ž

2๊ฐ€ ๊ธฐ์ค€์ผ ๋•Œ, 2 + 2 + 1 ๋˜๋Š” 2 + 1 + 1 + 1 ์˜ case ๋“ค์„ ๋„์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ... ์ด๋Š” ํ•ฉ 3์ด ๊ฐ–๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€๋„ ๋™์ผํ•˜๋‹ค. 2 + 1 ๋˜๋Š” 1 + 1 + 1

 

๋‹ค๋ฅธ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ํ•ฉ 4๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์•„๋ณด๋ฉด,

1 + 1 + 1 + 1 ๋˜๋Š” 2 + 1 + 1 ๋˜๋Š” 2 + 2 ์ด๋ ‡๊ฒŒ ์ด 3๊ฐœ์˜ case๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๊ณ  

์ด ์•ˆ์—

โœ”  1์„ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ 4๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” 1 + 1 + 1 + 1
โœ”  2๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ 4๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” 2 + 1 + 1 ๊ณผ 2 + 2 ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

 

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•˜๊ณ  ์‹ถ์€ ๊ฑด ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋‹ˆ๊นŒ, cases๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹์„ ๊ตฌํ•ด๋ณด์ž.

์šฐ๋ฆฌ๋Š” 1์„ ๊ธฐ์ค€์œผ๋กœ ( ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ) ๊ฐ ์ˆ˜๋งˆ๋‹ค 1๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

** ์ธ๋ฑ์Šค 0์— 1์„ ํ• ๋‹นํ•ด๋†“์€ ์ด์œ ๋Š”, ๊ธฐ์ค€์ด ๋˜๋Š” ์ˆซ์ž๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

 

 

2๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž.

์•ž์„œ 1์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ์ˆซ์ž๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„์˜จ๋‹ค.

 

2๋Š”                    ( 1 + 1 ) ๊ณผ       ( 2-> ์ž๊ธฐ ์ž์‹             // array[2] = array[2] + array[0]

3์€              ( 1 + 1 + 1 ) ๊ณผ       ( 2 + 1-> ์ž๊ธฐ ์ž์‹               // array[3] = array[3] + array[1]                         

4๋Š”            1 + 1 + 1 + 1 ๊ณผ        2 + ( 1 + 1 ) ๊ณผ  2 + ( 2 )  -> ์ž๊ธฐ ์ž์‹           // array[4] = array[4] + array[2]    

5๋Š”      1 + 1 + 1 + 1 + 1 ๊ณผ  2 + ( 1 + 1 + 1 ) ๊ณผ  2 + ( 2 + 1 )  -> ์ž๊ธฐ ์ž์‹            // srray[5] = array[5] + array[3] 

 

์จ๋†“๊ณ ๋ณด๋‹ˆ๊นŒ ์ด์ œ์„œ์•ผ ๋ฐ˜๋ณต๋˜๋Š” ์š”์†Œ๊ฐ€ ๋ณด์ธ๋‹ค ... 

์ด ๊ทœ์น™์„ ์Šค์Šค๋กœ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค ์–ดํ›„ ...!

 

 

5๋Š” ์ž๊ธฐ ์ž์‹  1์„ ํฌํ•จํ•ด, ์ด 4๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ–๋Š”๋‹ค. result ๊ฐ€ 4๋‹ˆ๊นŒ !!~!! ์ •๋‹ต์ด๋‹ค ์ •๋‹ต

 

 

๐Ÿ“Œ  ์ฝ”๋“œ

 

function solution (n, money){
    let arr = new Array(n+1).fill(0);
    
    arr[0] = 1;
    
    for(let el of money){
    	for(let i=el; i<n+1; i++){
        	arr[i] = arr[i] + arr[i - el];
        }
    }
    
    return arr[n];
}

 

 

๐Ÿ“Œ  ๊นจ๋‹ฌ์€ ์ 

 

๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌํ•ด์•ผํ•˜๋Š” ์ž‘์€ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด์— ์ €์žฅํ•ด, ํฐ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ ์ง€์†์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ณต๊ฐ„ ๋ณต์žก๋„๋„ ์ ๊ณ  ... ์จ์•ผํ•˜๋Š” ์ˆ˜์‹๋„ ์ ์—ˆ์ง€๋งŒ ๊ทœ์น™์„ ์ฐพ๋Š” ๊ฒŒ ์ •๋ง ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์กฐํ•ฉ๊ณผ ์ˆœ์—ด, ์ค‘๋ณต ์กฐํ•ฉ์„ ์ž์œ ์ž์žฌ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•ด์„œ ๋” ์†์„ ๋ชป๋Œ€์ง€ ์•Š์•˜๋‚˜ ์‹ถ๋‹ค.

๋” ๋งŽ์€ ๋ฌธ์ œ๋“ค์„ ์ ‘ํ•˜๋ฉด์„œ ๋‡Œ์— ์ต๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค๋„ ์ˆซ์ž๋กœ ํ™œ์šฉํ•ด์„œ ๋ณต์žก๋„๋ฅผ ์ค„์˜€๋‹ค๊ณ  ํ•ด์•ผํ•˜๋‚˜ ...? ์—ฌํŠผ ๋ฐœ์ƒ๊ณผ ์ •๋ฆฌ !!! ์ค‘์š”ํ•˜๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€