glowing713
Frontend-Deep-Dive
glowing713
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
    • Languages (11)
      • JavaScript ๐Ÿ’› (3)
      • Python ๐Ÿ (4)
      • Java โ˜•๏ธ (3)
      • Swift ๐Ÿงก (1)
    • Computer_Science (1)
      • Computer_Network ๐Ÿ•ธ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring ๐Ÿ€ (1)
    • AI (2)
      • NLP ๐Ÿ—ฃ (1)
      • AI_Math โž— (1)
    • ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊พธ๋ฏธ๊ธฐ โœŒ (1)
    • ์ƒ๊ฐ์ •๋ฆฌ โœ๐Ÿป (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ปGithub

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ๋™์ ๊ณ„ํš๋ฒ•
  • bfs
  • ์™„์ „ํƒ์ƒ‰
  • Algorithm
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • Java
  • DP
  • ์ด๋ถ„ํƒ์ƒ‰
  • boostcampaitech
  • Stack
  • binary search
  • brute-force
  • Baekjoon
  • mst
  • ps
  • ์นด์นด์˜ค ๊ธฐ์ถœ
  • c++
  • BOJ
  • 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ
  • Python

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
glowing713

Frontend-Deep-Dive

[BOJ] ๋ฐฑ์ค€ 2294 ๋™์ „ 2 / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)
Problem_Solving

[BOJ] ๋ฐฑ์ค€ 2294 ๋™์ „ 2 / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)

2020. 3. 3. 23:15

์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฌธ์ œ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.


 

๐Ÿ’ฃ ๋ฌธ์ œ ์ดํ•ด

 

1. n๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ๋™์ „์ด ์ฃผ์–ด์ง„๋‹ค.

2. ์ด ๋™์ „๋“ค์„ ์‚ฌ์šฉํ•ด์„œ, ๊ทธ ๊ฐ€์น˜์˜ ํ•ฉ์ด k์›์ด ๋˜์•ผํ•œ๋‹ค.

3. ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ์†Œ์˜ ๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ๋™์ „์€ ๋ช‡ ๊ฐœ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ์‚ฌ์šฉํ•œ ๋™์ „์˜ ๊ตฌ์„ฑ์ด ๊ฐ™์€๋ฐ, ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค.

 

๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 

 

๐Ÿ’ญ ํ’€์ด ๊ณผ์ •

 

 

<coinArr>

 

1 5 12

coinArr์€ ๋™์ „ ๊ฐ€์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด ์ด๋‹ค.

์ฃผ์–ด์ง„ ๋™์ „ ์ข…๋ฅ˜๋Š” 1, 5, 12 ์„ธ ๊ฐ€์ง€ ์ด๋‹ค.

 

์ด๋•Œ std::sort ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋™์ „ ์ข…๋ฅ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ•ด๋‘”๋‹ค.

 

 

 

 

<dp>

 

0 ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’ ์ดˆ๊ธฐ๊ฐ’

dp ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ’์ด๊ณ  ๊ทธ ๊ฐ’์„ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋™์ „ ๊ฐœ์ˆ˜๋กœ ์ฑ„์›Œ์ง€๋Š” ๋ฐฐ์—ด ์ด๋‹ค.

dp[0] ์€ 0 ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” 987654321(์ดˆ๊ธฐ๊ฐ’) ์ด๋ผ๋Š” ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•จ์œผ๋กœ, ๊ทธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ๊ฐ€์ง„ ๋™์ „์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

(๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ผ๋ฉด 987654321 ์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.)

 

 

 

 

 

์ฒซ ๋ฒˆ์งธ ๋™์ „ ๊ฐ€์น˜์ธ 1์˜ ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ ธ๋ณด๊ฒ ๋‹ค. coinArr[0]

 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

 

j - coinArr[i] ์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ, ํ˜„์žฌ ์ธ๋ฑ์Šค์—์„œ ํ˜„์žฌ ๋™์ „๊ฐ€์น˜๋ฅผ ์ฐจ๊ฐํ–ˆ์„ ๋•Œ, (ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์ƒํ™ฉ) ์ฐจ์•ก์ด remain ์— ์ €์žฅ๋œ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ 3์ธ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค์ž๋ฉด, j ๋Š” 3์ด๊ณ , coinArr[i]๋Š” 1์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ remain ์€ 2๊ฐ€ ๋œ๋‹ค.

 

dp[j] = std::min(dp[j], 1 + dp[remain])

์ด ์—ฐ์‚ฐ์„ ๋ณด๋ฉด, ๊ฒฐ๊ตญ ํ˜„์žฌ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋™์ „ ์ตœ์†Œ ๊ฐœ์ˆ˜ (dp[j]) ๋Š” ํ˜„์žฌ ๋™์ „์„ ๋นผ๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ (dp[j]) ์™€, ํ˜„์žฌ ๋™์ „์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ (1 + dp[remain]) ์ค‘ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋˜๊ฒŒ ๋œ๋‹ค.

์ธ๋ฑ์Šค 3์˜ ๊ฒฝ์šฐ๋Š”, ์ด์ „ ๊ฐ’์ธ 987654321 ์™€, ํ˜„์žฌ ๊ฐ’์ธ 1 + dp[2] = 3 ์ค‘ ์ตœ์†Œ ๊ฐ’์ธ 3 ์ด ์ €์žฅ๋œ๋‹ค.

 

 

 

 

 

๋™์ „ ๊ฐ€์น˜ 5์˜ ๊ฒฝ์šฐ ( coinArr[1] )

 

0 1 2 3 4 1 2 3 4 5 2 3 4 5 6 3

 

 

 

 

๋™์ „ ๊ฐ€์น˜ 12์˜ ๊ฒฝ์šฐ ( coinArr[2] )

 

0 1 2 3 4 1 2 3 4 5 2 3 1 2 3 3

 

๋งˆ์ง€๋ง‰์˜ ๊ฒฝ์šฐ, ๊ธฐ์กด dp[15] ๊ฐ€ 3 ์ด์—ˆ๊ณ , ์ƒˆ๋กญ๊ฒŒ ๊ณ„์‚ฐํ•œ 1 + dp[3] ์ด 4 ์ด๋ฏ€๋กœ ์ตœ์†Œ ๊ฐ’์ธ 3์ด ์ €์žฅ๋œ๋‹ค.

 

๋งˆ์ง€๋ง‰ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์—ฐ์‚ฐ์„ ํ†ตํ•ด, ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ฒ˜์Œ ๊ทธ๋Œ€๋กœ 987654321 ์ด๋ผ๋ฉด ํ˜„์žฌ ๊ฐ€์ง„ ๋™์ „์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ -1 ์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ ๊ฐ’์ด ์ตœ์ข… ๋‹ต์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ฆ‰, ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‹ต์ด 3์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

 

์ž‘์„ฑ ์–ธ์–ด: C++

 

#include <cstdio>
#include <algorithm>

int main(){
    int coinNum, priceNum;
    int coinArr[101] = {0, };
    int dp[10001] = {0, };
    scanf("%d %d", &coinNum, &priceNum);
    
    for (int i = 0; i < coinNum; ++i) {
        scanf("%d", &coinArr[i]);
    }
    std::sort(coinArr, coinArr+coinNum); // ์ž…๋ ฅ๋ฐ›์€ ๋™์ „๊ฐ€์น˜ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
    dp[0] = 0;
    
    for (int i = 1; i <= priceNum; ++i) {
        dp[i] = 987654321;
    }
    
    for (int i = 0; i < coinNum; ++i) {
        for (int j = coinArr[i]; j <= priceNum; ++j) {
            int remain = j - coinArr[i];
            dp[j] = std::min(dp[j], 1 + dp[remain]);
        }
    }
    
    printf("%d\n", dp[priceNum] == 987654321 ? -1 : dp[priceNum]);
    return 0;
}

 

 

 

๐Ÿ† ๋ฐฐ์šด ์ 

 

์ฒ˜์Œ์—๋Š” dp ๋ฐฐ์—ด์„ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์„ ์–ธํ•˜์—ฌ, ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋™์ „ ๊ฐ€์น˜๋งˆ๋‹ค ๊ฐ๊ฐ ํ•œ ์—ด์”ฉ ํ•˜์—ฌ ๊ณ„์‚ฐํ–ˆ๋‹ค.

๋ฌธ์ œ์— ๋‚˜์˜จ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋„ ์ •๋‹ต์œผ๋กœ ๋‚˜์˜ค๊ณ , ๋‚ด๊ฐ€ ๋งŒ๋“  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋„ ๋‹ค ์˜ˆ์ƒ๋˜๋Š” ์ •๋‹ต์ด ๋‚˜์˜ค๋‚˜, ์ œ์ถœํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ ์˜ค๋‹ต์ด ๋‚˜์™”๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜๋‹ˆ, 1์ฐจ์› ๋ฐฐ์—ด๋กœ ์„ ์–ธํ•˜์—ฌ๋„ ๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‚˜ ์—ญ์‹œ๋„ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋‹ค์‹œ ์งœ๋ณด๋‹ˆ ํ•œ๋ฒˆ์— ์ •๋‹ต์ฒ˜๋ฆฌ๋ฅผ ๋ฐ›์•˜๋‹ค..

 

๋‹ค๋ฅธ ๋‚  2์ฐจ์› ๋ฐฐ์—ด๋กœ๋„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฐ์Šต์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Problem_Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ๋ฐฑ์ค€ 1904 01ํƒ€์ผ / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)  (0) 2020.03.04
[BOJ] ๋ฐฑ์ค€ 2193 ์ด์นœ์ˆ˜ / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)  (0) 2020.03.04
[BOJ] ๋ฐฑ์ค€ 9465 ์Šคํ‹ฐ์ปค / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)  (0) 2020.03.02
[BOJ] ๋ฐฑ์ค€ 1463 1๋กœ ๋งŒ๋“ค๊ธฐ / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)  (0) 2020.02.27
[BOJ] ๋ฐฑ์ค€ 1182 ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ / ์™„์ „ ํƒ์ƒ‰(Brute-force Search)  (0) 2020.02.26
    'Problem_Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [BOJ] ๋ฐฑ์ค€ 1904 01ํƒ€์ผ / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)
    • [BOJ] ๋ฐฑ์ค€ 2193 ์ด์นœ์ˆ˜ / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)
    • [BOJ] ๋ฐฑ์ค€ 9465 ์Šคํ‹ฐ์ปค / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)
    • [BOJ] ๋ฐฑ์ค€ 1463 1๋กœ ๋งŒ๋“ค๊ธฐ / ๋™์  ๊ณ„ํš๋ฒ•(Dynamic-Programming)
    glowing713
    glowing713

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”