Skip to content

Conversation

@Seol-Munhyeok
Copy link
Collaborator

@Seol-Munhyeok Seol-Munhyeok commented Aug 14, 2025

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๊ณต๋ถ€

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

50๋ถ„

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

์ ‘๊ทผ๋ฒ•

์ด์ „์— ํ‘ผ ์™„์ „๋ฒ”์ฃ„ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•œ ํ˜•์‹์˜ DP ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํฌ๊ฒŒ ๋ณด๋ฉด ๊ฒฐ๊ตญ ์ž์›(์šฉ๋Ÿ‰) ์ œํ•œ + ์•„์ดํ…œ ์„ ํƒ ์œ ํ˜•์˜ ๋ฐฐ๋‚ญ ๋ฌธ์ œ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

์š”์†Œ ๋ฐฐ๋‚ญ ๋ฌธ์ œ์—์„œ์˜ ์˜๋ฏธ "์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€" ๋ฌธ์ œ์—์„œ์˜ ๋Œ€์‘
์šฉ๋Ÿ‰(์ž์›) ๋ฐฐ๋‚ญ์˜ ๋ฌด๊ฒŒ ์ œํ•œ ๋ชฉํ‘œ ์•Œ๊ณ ๋ ฅ(maxA)๊ณผ ์ฝ”๋”ฉ๋ ฅ(maxC)
ํ˜„์žฌ ์ƒํƒœ ๋ฐฐ๋‚ญ์— ์ฑ„์šด ๋ฌด๊ฒŒ ํ˜„์žฌ ์•Œ๊ณ ๋ ฅ a, ํ˜„์žฌ ์ฝ”๋”ฉ๋ ฅ c
๊ฐ€์น˜(value) ์•„์ดํ…œ ๋„ฃ์–ด์„œ ์–ป๋Š” ๊ฐ€์น˜ ์•Œ๊ณ ๋ ฅ ์ฆ๊ฐ€๋Ÿ‰, ์ฝ”๋”ฉ๋ ฅ ์ฆ๊ฐ€๋Ÿ‰
๋น„์šฉ(weight) ๋ฌด๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„ (cost)

๋”ฐ๋ผ์„œ ์ž์›(์šฉ๋Ÿ‰) ์ œํ•œ + ์•„์ดํ…œ ์„ ํƒ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ผ๋ฉด ์ด ๋ฌธ์ œ ์ƒํ™ฉ์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ๋‚ญ ๋ฌธ์ œ์˜ ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•ํ• ์ง€๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ๋ฌธ์ œ๊ฐ€ ํ’€๋ฆฝ๋‹ˆ๋‹ค!

์ƒํƒœ ์ •์˜ (State)

2์ฐจ์› DP๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • $dp[a][c]$ : ์•Œ๊ณ ๋ ฅ $a$, ์ฝ”๋”ฉ๋ ฅ $c$ ๋ฅผ ์–ป๋Š”๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

์ดˆ๊ธฐ๊ฐ’ (Initialization)

dp ํ…Œ์ด๋ธ”์˜ ์ดˆ๊ธฐ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • $dp[alp][cop] = 0$
  • ๋‚˜๋จธ์ง€ ๊ฐ’์€ INF๋กœ ์ดˆ๊ธฐํ™”

alp, cop ๋Š” ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ฒ˜์Œ์— ๊ฐ€์ง„ ์•Œ๊ณ ๋ ฅ๊ณผ ์ฝ”๋”ฉ๋ ฅ์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ๋Š” ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด 0์ž…๋‹ˆ๋‹ค.

์ •๋‹ต ์œ„์น˜ (Answer)

์ด ๋ฌธ์ œ์—์„œ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ๋ฌธ์ œ๋“ค์„ ํ’€ ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ ฅ๊ณผ ์ฝ”๋”ฉ๋ ฅ์„ ์–ป๋Š” ์ตœ๋‹จ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ ฅ๊ณผ ์ฝ”๋”ฉ๋ ฅ์ด ๋ฌธ์ œ์˜ ์•Œ๊ณ ๋ ฅ๊ณผ ์ฝ”๋”ฉ๋ ฅ์˜ ์ตœ๋Œ“๊ฐ’ ์ด์ƒ์ด๋ฉด ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$maxA$ : ๋ฌธ์ œ๋“ค ์ค‘ ์•Œ๊ณ ๋ ฅ์˜ ์ตœ๋Œ“๊ฐ’
$maxC$ : ๋ฌธ์ œ๋“ค ์ค‘ ์ฝ”๋”ฉ๋ ฅ์˜ ์ตœ๋Œ“๊ฐ’

  • ์ •๋‹ต = $dp[maxA][maxC]$

์ „์ด (Transition)

์ƒํƒœ๋ฅผ ์ž˜ ์ •์˜ํ–ˆ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์ด ๋„์ถœ๋ฉ๋‹ˆ๋‹ค.

$alp_{rwd}$ : ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ ์–ป๋Š” ์•Œ๊ณ ๋ ฅ
$cop_{rwd}$ : ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ ์–ป๋Š” ์ฝ”๋”ฉ๋ ฅ
$cost$ : ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„

  • ์•Œ๊ณ ๋ ฅ์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ : $dp[a+1][c] = \min(dp[a+1][c],\ dp[a][c] + 1)$
  • ์ฝ”๋”ฉ๋ ฅ์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ : $dp[a][c+1] = \min(dp[a][c+1],\ dp[a][c] + 1)$
  • ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒฝ์šฐ : $dp[a + alp_{rwd}][c + cop_{rwd}] = \min(dp[a + alp_{rwd}][c + cop_{rwd}],\ dp[a][c] + cost)$

์ปท(๊ฒฝ๊ณ„ ์ฒ˜๋ฆฌ, Pruning)

์œ„ ์ ํ™”์‹์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ „์ด๋Š” ๋ฌด์‹œํ•˜๋„๋ก ๊ฒฝ๊ณ„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ์˜ ์•Œ๊ณ ๋ ฅ(์ฝ”๋”ฉ๋ ฅ) ์ž์ฒด๊ฐ€ maxA(maxC)๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

alp, cop = min(alp, maxA), min(cop, maxC)

์ด๋ ‡๊ฒŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‚˜๋ฉด dp ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dp = [[INF for _ in range(maxC + 1)] for _ in range(maxA + 1)]

๊ทธ๋ฆฌ๊ณ  dp ํ…Œ์ด๋ธ”์„ ์ฑ„์šธ ๋•Œ, ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒฝ์šฐ, ์ฑ„์šฐ๋ ค๋Š” a๊ฐ€ alp_req ์ด์ƒ, c๊ฐ€ cop_req ์ด์ƒ์ผ ๋•Œ๋งŒ dp ํ…Œ์ด๋ธ”์„ ์ฑ„์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ a ๋˜๋Š” c๋ฅผ ์ฑ„์šธ ๋•Œ ๊ทธ ๊ฐ’์ด maxA๊ณผ maxC๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

for a in range(alp, maxA + 1):
        for c in range(cop, maxC + 1): 
            # ๊ณต๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ
            ta, tc = min(maxA, a+1), min(maxC, c+1)
            dp[ta][c] = min(dp[ta][c], dp[a][c] + 1)
            dp[a][tc] = min(dp[a][tc], dp[a][c] + 1)
            
            # ๋ฌธ์ œ ํ’€์ดํ•˜๋Š” ๊ฒฝ์šฐ
            for alp_req, cop_req, alp_rwd, cop_rwd, cost in problems:
                if a >= alp_req and c >= cop_req:
                    na, nc = min(maxA, a + alp_rwd), min(maxC, c + cop_rwd)
                    dp[na][nc] = min(dp[na][nc], dp[a][c] + cost)

์ „์ฒด ์ฝ”๋“œ๋Š” Files changed๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”!

๐Ÿ“š ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

  • DP๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ, ์ƒํƒœ ์ •์˜, ์ดˆ๊ธฐ๊ฐ’, ์ •๋‹ต ์œ„์น˜, ์ „์ด, ์ปท(๊ฒฝ๊ณ„ ์ฒ˜๋ฆฌ, Pruning) ์ด 5๋‹จ๊ณ„๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ์กฐ๊ธˆ ์ˆ˜์›”ํ•ฉ๋‹ˆ๋‹ค!
  • ๋ฐฐ๋‚ญ๋ฌธ์ œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋‚ด๋ฉด ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ์‰ฌ์›Œ์ง€๋‹ˆ๊นŒ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ผ์ • ์ด์ƒ์˜ ์•Œ๊ณ ๋ ฅ๊ณผ ์ฝ”๋”ฉ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค ์ฒ˜๋Ÿผ ์ถ”๊ฐ€์ ์ธ ์ œํ•œ์„ ๊ฑธ์–ด์„œ ๋‚œ๋„๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ œํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” for ๋ฌธ ์†์—์„œ ์ ์ ˆํ•œ if ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ dp ํ…Œ์ด๋ธ”์„ ์ฑ„์šฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@hyeokbini
Copy link
Collaborator

hyeokbini commented Aug 16, 2025

๊ตฌํ•˜๋Š” ๊ฐ’์€ ์‹œ๊ฐ„์— ๊ด€ํ•œ ๋‚ด์šฉ์ด๊ณ , ์ด ๊ฐ’์€ ๊ฒฐ๊ตญ ํŠน์ • ์•Œ๊ณ ๋ ฅ / ์ฝ”๋”ฉ๋ ฅ์— ๊ด€ํ•œ ๊ฐ’์œผ๋กœ ์ €์žฅ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฌด์ž‘์ • 2์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๊ฐฑ์‹ ๋  ์ˆ˜ ์žˆ์„์ง€ ์ ์–ด ๋ณด๋ฉด์„œ ํ™•์ธํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

image

์—‘์…€๋กœ ๋งŒ๋“  ๊ฑฐ๋ผ ํ€„๋ฆฌํ‹ฐ๊ฐ€ ์ข€ ์ €๋ ดํ•ด ๋ณด์ด๋„ค์š”... ์˜ˆ์ œ 2๋ฒˆ์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์ง์ ‘ ๊ฐ’์„ ์ ๊ณ , ๊ฐฑ์‹ ํ•ด ๋ณด๋ฉด์„œ ๊ทœ์น™์„ฑ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ’์˜ ๊ฐฑ์‹ ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณต๋ถ€๋ฅผ ํ†ตํ•œ ํŠน์ • ๋Šฅ๋ ฅ์น˜ + 1, ์‹œ๊ฐ„ + 1
  • ๋ฌธ์ œํ’€์ด๋ฅผ ํ†ตํ•œ ๋Šฅ๋ ฅ์น˜ + @, ์‹œ๊ฐ„ + @

๊ณต๋ถ€๋ฅผ ํ†ตํ•œ ๋Šฅ๋ ฅ์น˜ ํ•ฉ์‚ฐ / ์‹œ๊ฐ„ ๊ณ„์‚ฐ์€ ์ด์ „ ์นธ + 1 ๋กœ์ง์œผ๋กœ ๊ฐ„๋‹จํžˆ ์งค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œํ’€์ด๋ฅผ ํ†ตํ•œ ๋Šฅ๋ ฅ์น˜ ํ•ฉ์‚ฐ์€ ์ฆ๊ฐ€๋Ÿ‰๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ํ•ด๋‹น ์นธ์— ๊ฐฑ์‹ ๋˜์–ด์žˆ๋˜ ๊ฐ’์ด ํ˜„์žฌ ์นธ + ์‹œ๊ฐ„ ์†Œ๋ชจ๋Ÿ‰๋ณด๋‹ค ๋งŽ๋‹ค๋ฉด, ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ์‹œํ‚ค๋Š” ๋กœ์ง์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์•„๋ž˜๋Š” ์ œ์ถœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ‘ธ์‹œ๋А๋ผ ๊ณ ์ƒํ•˜์…จ์–ด์š”!

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๊ณต๋ถ€ / c++
#include <bits/stdc++.h>

using namespace std;

int solution(int alp, int cop, vector<vector<int>> problems) {
    int maxalgo = 0;
    int maxcod = 0;
    for(int i = 0; i < problems.size(); i++)
    {
        maxalgo = max(maxalgo, problems[i][0]);
        maxcod = max(maxcod, problems[i][1]);
    }

    alp = min(alp, maxalgo);
    cop = min(cop, maxcod);

    vector<vector<int>> dp(maxalgo + 1, vector<int>(maxcod + 1, 1000000000));
    dp[alp][cop] = 0;

    for(int i = alp; i <= maxalgo; i++)
    {
        for(int j = cop; j <= maxcod; j++)
        {
            // ๊ณต๋ถ€ํ•ด์„œ ๋Šฅ๋ ฅ์น˜ ์˜ฌ๋ฆฌ๊ธฐ
            if(i + 1 <= maxalgo)
            {
                dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + 1);
            }
            if(j + 1 <= maxcod)
            {
                dp[i][j + 1] = min(dp[i][j + 1], dp[i][j] + 1);
            }

            // ๊ฐ ๋ฌธ์ œ ํ’€๊ธฐ
            for(int k = 0; k < problems.size(); k++)
            {
                if(i >= problems[k][0] && j >= problems[k][1])
                {
                    int ni = min(maxalgo, i + problems[k][2]);
                    int nj = min(maxcod, j + problems[k][3]);
                    dp[ni][nj] = min(dp[ni][nj], dp[i][j] + problems[k][4]);
                }
            }
        }
    }

    return dp[maxalgo][maxcod];
}

@mj010504
Copy link
Collaborator

dp๋ฌธ์ œ์— ๋Œ€ํ•œ ์—ฐ์Šต๊ณผ ํŒ๋„ ๋งŽ์ด ์–ป๊ณ  ๊ฐ‘๋‹ˆ๋‹ค. ๋•๋ถ„์— dp์— ๋Œ€ํ•œ ๋‘๋ ค์›€์ด ์กฐ๊ธˆ ์‚ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€
#include<bits/stdc++.h>

using namespace std;

int solution(int a, int c, vector<vector<int>> pv) {
    int maxA = 0, maxC = 0;
    for(int i = 0; i < pv.size(); i++) {
        maxA = max(maxA, pv[i][0]);
        maxC = max(maxC, pv[i][1]);
    }

    vector<vector<int>> dp(maxA + 1, vector<int> (maxC + 1, 21437900));
    a = min(a, maxA); c = min(c, maxC);
    dp[a][c] = 0;

    for(int i = a; i <= maxA; i++) {
        for(int j = c; j <= maxC; j++) {
            int ni = min(maxA, i + 1); int nj = min(maxC, j + 1);
            dp[ni][j] = min(dp[ni][j], dp[i][j] + 1);
            dp[i][nj] = min(dp[i][nj], dp[i][j] + 1);

            for(int k = 0; k < pv.size(); k++) {
                if(pv[k][0] <= i && pv[k][1] <= j) {
                    ni = min(maxA, i + pv[k][2]); nj = min(maxC, j + pv[k][3]);
                    dp[ni][nj] = min(dp[ni][nj], dp[i][j] + pv[k][4]);
                }
            }
        }
    }

 
    return dp[maxA][maxC];
}

Copy link
Collaborator

@flydongwoo flydongwoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์˜ค๋žœ๋งŒ์— ๋ณด๋Š” knapsack ๋ฌธ์ œ์ด๊ตฐ์š”!

(์•Œ๊ณ ๋ ฅ, ์ฝ”๋”ฉ๋ ฅ) ๋‘ ๊ฐ’์œผ๋กœ๋งŒ ์ •์˜๋˜๊ณ , ์–ด๋–ค ํ–‰๋™์„ ํ•˜๋“ , ๊ฒฐ๊ตญ ์ƒˆ๋กœ์šด (์•Œ๊ณ ๋ ฅ, ์ฝ”๋”ฉ๋ ฅ) ์ƒํƒœ๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์ƒํƒœ๊ณต๊ฐ„ ํƒ์ƒ‰ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐใ…Žํ•ด์„œ ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ํŠน์ • ์ƒํƒœ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋ผ๊ณ  ๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ DP๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ˆœ ํƒ์ƒ‰๋„ ์ž ๊น ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ๋ชจ๋“  ์„ ํƒ์„ ๋”ฐ๋ผ๊ฐ€๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค
๋ชจ๋“  ํ–‰๋™์˜ ๋น„์šฉ์ด 1์ด์—ˆ์œผ๋ฉด BFS๋กœ ํ’€์—ˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š”!

๋ฌธ์ œ ํ‘ธ๋А๋ผ ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค!

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๊ณต๋ถ€ ```cpp #include #include #include using namespace std;

int solution(int alp, int cop, vector<vector> problems) {
int targetA = 0;
int targetC = 0;
for (size_t k = 0; k < problems.size(); k++) {
targetA = max(targetA, problems[k][0]);
targetC = max(targetC, problems[k][1]);
}

alp = min(alp, targetA);
cop = min(cop, targetC);

const int INF = 1e9;
vector<vector<int>> dp(targetA + 1, vector<int>(targetC + 1, INF));
dp[alp][cop] = 0;

for (int i = alp; i <= targetA; i++) {
    for (int j = cop; j <= targetC; j++) {
        if (dp[i][j] == INF) {
            continue;
        }

        if (i + 1 <= targetA) {
            dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + 1);
        }

        if (j + 1 <= targetC) {
            dp[i][j + 1] = min(dp[i][j + 1], dp[i][j] + 1);
        }

        for (size_t k = 0; k < problems.size(); k++) {
            int reqA = problems[k][0];
            int reqC = problems[k][1];
            int rwdA = problems[k][2];
            int rwdC = problems[k][3];
            int cost = problems[k][4];

            if (i >= reqA && j >= reqC) {
                int ni = min(targetA, i + rwdA);
                int nj = min(targetC, j + rwdC);
                dp[ni][nj] = min(dp[ni][nj], dp[i][j] + cost);
            }
        }
    }
}

return dp[targetA][targetC];

}



@Seol-Munhyeok Seol-Munhyeok merged commit 36d16b3 into main Aug 23, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants