Skip to content

Commit 7fffe4e

Browse files
yoouyeonuyeon0
authored andcommitted
๐Ÿ’ก ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 72416 - ๋งค์ถœ ํ•˜๋ฝ ์ตœ์†Œํ™”
1 parent 602a5f3 commit 7fffe4e

2 files changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
โญ๏ธ ๋ฌธ์ œ ์ •๋ณด โญ๏ธ
3+
๋ฌธ์ œ : 72416 - ๋งค์ถœ ํ•˜๋ฝ ์ตœ์†Œํ™”
4+
๋ ˆ๋ฒจ : Level 4
5+
๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/72416
6+
*/
7+
8+
// ANCHOR : 26.02.07 ํ’€์ด
9+
function solution(sales, links) {
10+
const n = sales.length;
11+
12+
// 1) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ
13+
const children = Array.from({ length: n + 1 }, () => []);
14+
for (const [a, b] of links) {
15+
children[a].push(b);
16+
}
17+
18+
// 2) ํ›„์œ„์ˆœํšŒ ์ค€๋น„
19+
// NOTE: order๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ postorder ํšจ๊ณผ๋ฅผ ๋‚ธ๋‹ค.
20+
const order = [];
21+
const stack = [1];
22+
while (stack.length) {
23+
const v = stack.pop();
24+
order.push(v);
25+
for (const c of children[v]) {
26+
stack.push(c);
27+
}
28+
}
29+
30+
// 3) dp ๋ฐฐ์—ด ์ค€๋น„ (1-indexed)
31+
// dp0: v๊ฐ€ ์ฐธ์„ํ–ˆ์„ ๋•Œ์˜ ์›Œํฌ์ˆ ์ฐธ์„ ์ธ์›์˜ ์ด ํ•˜๋ฃจ ํ‰๊ท  ๋งค์ถœ์•ก ์ตœ์†Ÿ๊ฐ’
32+
// dp1: v๊ฐ€ ์ฐธ์„ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ์›Œํฌ์ˆ ์ฐธ์„ ์ธ์›์˜ ์ด ํ•˜๋ฃจ ํ‰๊ท  ๋งค์ถœ์•ก ์ตœ์†Ÿ๊ฐ’
33+
const dp0 = new Array(n + 1).fill(0);
34+
const dp1 = new Array(n + 1).fill(0);
35+
36+
// 4) Bottom-up DP ๊ณ„์‚ฐ (order๋ฅผ ์—ญ์ˆœ์œผ๋กœ ๋Œ๋ฉด์„œ ํ›„์œ„์ˆœํšŒ)
37+
for (let i = order.length - 1; i >= 0; i--) {
38+
const v = order[i];
39+
const childs = children[v];
40+
41+
// case 1) ๋ฆฌํ”„์ธ ๊ฒฝ์šฐ (์ˆœ์ˆ˜ ํŒ€์›์ธ ๊ฒฝ์šฐ)
42+
// - dp0[v] = sales[v] (๋ณธ์ธ์ด ์ฐธ์„)
43+
// - dp1[v] = 0 (๋ณธ์ธ ๋ถˆ์ฐธ. ์•„๋ž˜ ํŒ€์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์ค‘ ํ•œ๋ช…์ด ๊ผญ ์ฐธ์„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐ•์ œ๊ฐ€ ์—†๋‹ค. ๋ถˆ์ฐธํ•˜๋ฉด ๋.)
44+
if (childs.length === 0) {
45+
dp1[v] = sales[v - 1];
46+
dp0[v] = 0;
47+
continue;
48+
}
49+
50+
// case 2) ํŒ€์žฅ์ด๊ณ  ํŒ€์›์ธ ๊ฒฝ์šฐ (ํ•˜์œ„ ํŒ€์ด ์žˆ์Œ)
51+
// a) ์ฐธ์„ํ•˜๋Š” ๊ฒฝ์šฐ : ๊ฐ™์€ ํŒ€์˜ ๋‹ค๋ฅธ ํŒ€์›๋“ค์€ ์ฐธ์„ํ•˜๋“  ์•ˆํ•˜๋“  ์ƒ๊ด€ ์—†์Œ
52+
// -> dp1[v] = sales[v] + โˆ‘ min(dp0, dp1)
53+
// b) ๋ถˆ์ฐธํ•˜๋Š” ๊ฒฝ์šฐ : ๊ฐ™์€ ํŒ€์˜ ๋‹ค๋ฅธ ํŒ€์› ์ค‘ ์ ์–ด๋„ ํ•œ๋ช…์€ ์ฐธ์„ํ•ด์•ผ ํ•จ
54+
// -> ์šฐ์„  ๋ชจ๋“  ํŒ€์›๋“ค์—์„œ ๊ฐ€์žฅ ์‹ผ ์ƒํƒœ๋ฅผ ๋”ํ•œ ๋’ค (sumMin)
55+
// -> ์ฐธ์„์œผ๋กœ ๋Œ๋ ธ์„ ๋•Œ ๋น„์šฉ์ด ๊ฐ€์žฅ ์ ๊ฒŒ ์ถ”๊ฐ€๋˜๋Š” ์ธ์›์„ ์ฐธ์„์œผ๋กœ ๋Œ๋ฆฐ๋‹ค. (extraMin)
56+
// -> dp0[v] = sumMin + extraMin
57+
let sumMin = 0;
58+
let extraMin = Infinity;
59+
60+
for (const c of childs) {
61+
const m = Math.min(dp0[c], dp1[c]); // ์ฐธ์„ํ•˜๋Š” ๊ฒƒ๊ณผ ์•ˆํ•˜๋Š” ๊ฒƒ ์ค‘ ์ตœ์†Ÿ๊ฐ’
62+
sumMin += m;
63+
64+
const extra = dp1[c] - m; // (์ฐธ์„์œผ๋กœ ๋Œ๋ ธ์„ ๋•Œ ์ถ”๊ฐ€๋˜๋Š” ๋น„์šฉ)
65+
if (extra < extraMin) {
66+
extraMin = extra;
67+
}
68+
}
69+
70+
dp1[v] = sales[v - 1] + sumMin;
71+
dp0[v] = sumMin + extraMin;
72+
}
73+
74+
return Math.min(dp0[1], dp1[1]);
75+
}

โ€ŽProgrammers/README.mdโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
| 68936 | แ„แ…ฏแ„ƒแ…ณแ„‹แ…กแ†ธแ„Žแ…ฎแ†จ แ„’แ…ฎ แ„€แ…ขแ„‰แ…ฎ แ„‰แ…ฆแ„€แ…ต | [68936_แ„แ…ฏแ„ƒแ…ณแ„‹แ…กแ†ธแ„Žแ…ฎแ†จ_แ„’แ…ฎ_แ„€แ…ขแ„‰แ…ฎ_แ„‰แ…ฆแ„€แ…ต.js](Level2/68936_แ„แ…ฏแ„ƒแ…ณแ„‹แ…กแ†ธแ„Žแ…ฎแ†จ_แ„’แ…ฎ_แ„€แ…ขแ„‰แ…ฎ_แ„‰แ…ฆแ„€แ…ต.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/68936) |
6161
| 70129 | แ„‹แ…ตแ„Œแ…ตแ†ซ แ„‡แ…งแ†ซแ„’แ…ชแ†ซ แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„’แ…กแ„€แ…ต | [70129_แ„‹แ…ตแ„Œแ…ตแ†ซ_แ„‡แ…งแ†ซแ„’แ…ชแ†ซ_แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„’แ…กแ„€แ…ต.js](Level2/70129_แ„‹แ…ตแ„Œแ…ตแ†ซ_แ„‡แ…งแ†ซแ„’แ…ชแ†ซ_แ„‡แ…กแ†ซแ„‡แ…ฉแ†จแ„’แ…กแ„€แ…ต.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/70129) |
6262
| 72411 | ๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ | [72411_๋ฉ”๋‰ด_๋ฆฌ๋‰ด์–ผ.js](Level2/72411_๋ฉ”๋‰ด_๋ฆฌ๋‰ด์–ผ.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/72411) |
63+
| 72416 | ๋งค์ถœ ํ•˜๋ฝ ์ตœ์†Œํ™” | [72416_๋งค์ถœ_ํ•˜๋ฝ_์ตœ์†Œํ™”.js](Level4/72416_๋งค์ถœ_ํ•˜๋ฝ_์ตœ์†Œํ™”.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/72416) |
6364
| 76502 | ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ | [76502_๊ด„ํ˜ธ_ํšŒ์ „ํ•˜๊ธฐ.js](Level2/76502_๊ด„ํ˜ธ_ํšŒ์ „ํ•˜๊ธฐ.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/76502) |
6465
| 77484 | แ„…แ…ฉแ„„แ…ฉแ„‹แ…ด แ„Žแ…ฌแ„€แ…ฉ แ„‰แ…ฎแ†ซแ„‹แ…ฑแ„‹แ…ช แ„Žแ…ฌแ„Œแ…ฅ แ„‰แ…ฎแ†ซแ„‹แ…ฑ | [77484_แ„…แ…ฉแ„„แ…ฉแ„‹แ…ด_แ„Žแ…ฌแ„€แ…ฉ_แ„‰แ…ฎแ†ซแ„‹แ…ฑแ„‹แ…ช_แ„Žแ…ฌแ„Œแ…ฅ_แ„‰แ…ฎแ†ซแ„‹แ…ฑ.js](Level1/77484_แ„…แ…ฉแ„„แ…ฉแ„‹แ…ด_แ„Žแ…ฌแ„€แ…ฉ_แ„‰แ…ฎแ†ซแ„‹แ…ฑแ„‹แ…ช_แ„Žแ…ฌแ„Œแ…ฅ_แ„‰แ…ฎแ†ซแ„‹แ…ฑ.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/77484) |
6566
| 77486 | ๋‹ค๋‹จ๊ณ„ ์นซ์†” ํŒ๋งค | [77486_๋‹ค๋‹จ๊ณ„_์นซ์†”_ํŒ๋งค.js](Level3/77486_๋‹ค๋‹จ๊ณ„_์นซ์†”_ํŒ๋งค.js) | [๐Ÿ”—](https://school.programmers.co.kr/learn/courses/30/lessons/77486) |

0 commit comments

Comments
ย (0)