[ ๐—ฝ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ฒ๐—ฟ๐˜€ ] ์ •์ˆ˜ ์‚ผ๊ฐํ˜• - DP | JavaScript

NewHaยท2025๋…„ 5์›” 3์ผ
0
post-thumbnail

๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.3 - ์ •์ˆ˜ ์‚ผ๊ฐํ˜•

์œ„์™€ ๊ฐ™์€ ์‚ผ๊ฐํ˜•์˜ ๊ผญ๋Œ€๊ธฐ์—์„œ ๋ฐ”๋‹ฅ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๊ฒฝ๋กœ ์ค‘, ๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์™ผ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 3์—์„œ๋Š” ๊ทธ ์•„๋ž˜์นธ์˜ 8 ๋˜๋Š” 1๋กœ๋งŒ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‚ผ๊ฐํ˜•์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด triangle์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฑฐ์ณ๊ฐ„ ์ˆซ์ž์˜ ์ตœ๋Œ“๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

๐Ÿฅ… ์ œํ•œ ์กฐ๊ฑด

  • ์‚ผ๊ฐํ˜•์˜ ๋†’์ด๋Š” 1 ์ด์ƒ 500 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์‚ผ๊ฐํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์ˆซ์ž๋Š” 0 ์ด์ƒ 9,999 ์ดํ•˜์˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

๐Ÿ“ ์ž…์ถœ๋ ฅ ์˜ˆ

triangleresult
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]30

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ฌธ์ œ ํ’€์ด

์ฃผ์–ด์ง„ ์‚ผ๊ฐํ˜•์˜ ๊ผญ๋Œ€๊ธฐ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์™ผ์ชฝ ์•„๋ž˜ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ๋งŒ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งจ ์•„๋ž˜์ชฝ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ”์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ์—๋Š” Bottom-up ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ํ•œ ๋ฒˆ์”ฉ๋งŒ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Top-down ๋ฐฉ์‹์œผ๋กœ ํ’€๋ ค๋ฉด ๊ฐ ๊ฒฝ๋กœ๋งˆ๋‹ค ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘๋ณตํ•ด์„œ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋˜๊ณ , ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ตฌํ˜„์ด ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

DP๋ฅผ ์‚ฌ์šฉํ•ด Bottom-up์œผ๋กœ ํ’€๊ฒ ์Šต๋‹ˆ๋‹ค. dp ๋ฐฐ์—ด์€ ์ฃผ์–ด์ง„ ์‚ผ๊ฐํ˜•์„ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ•˜๋ฉด ์ถ”๊ฐ€ ๋ฐฐ์—ด ์—†์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const dp = triangle.map(row => [...row]);

์ด ๋•Œ dp[i]๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

dp[i][j] = triangle[i][j] + Math.max(dp[i + 1][j], dp[i + 1][j + 1]);

๋งจ ์•„๋žซ์ค„์€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์•„๋ž˜์—์„œ ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ์œ„๋กœ ์˜ฌ๋ผ์˜ค๋ฉฐ ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด ๋‚˜๊ฐ’๋‹ˆ๋‹ค.

for(let i = dp.length - 2; i >= 0; i--){
	for(let j = 0; j < dp[i].length; j++){
		dp[i][j] += Math.max(dp[i + 1][j], dp[i + 1][j + 1]);
	}
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ผญ๋Œ€๊ธฐ์— ์ตœ๋Œ“๊ฐ’์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

return dp[0][0]

ํ•˜์ง€๋งŒ, ์ œ์ถœํ•˜๋ฉด ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ 1๋ฒˆ์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ฝ”๋“œ์—์„œ ๋ถˆํ•„์š”ํ•˜๋ฉด์„œ๋„ ์‹œ๊ฐ„์„ ๋“ค์ด๋Š” ๋ถ€๋ถ„์ด ๋ญ˜๊นŒ ํ•˜๋‹ค๊ฐ€, triangle๋ฐฐ์—ด์ด ํฌ๋‹ค๋ฉด dp๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด์„œ map์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ triangle๋ฐฐ์—ด ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ•ด๋ณด์•˜๊ณ , ํ†ต๊ณผํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์–ธ์–ด ํŠน์„ฑ์ƒ map ์—ฐ์‚ฐ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋น„์šฉ์ด ํฌ๊ฒŒ ๋“ค๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋ณด๋‹ค ๋А๋ ค์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์ฝ”๋“œ

function solution(triangle) {
  for (let i = triangle.length - 2; i >= 0; i--) {
    for (let j = 0; j < triangle[i].length; j++) {
      triangle[i][j] += Math.max(triangle[i + 1][j], triangle[i + 1][j + 1]);
    }
  }
  return triangle[0][0];
}
profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

0๊ฐœ์˜ ๋Œ“๊ธ€