๐ŸงBaekjoon_Algorithm๐Ÿง 12865 ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

๊ฐœ๋ฐœVelogยท2021๋…„ 5์›” 19์ผ
1

๐Ÿ™„๋ฌธ์ œ

์ด ๋ฌธ์ œ๋Š” ์•„์ฃผ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ์— ๊ด€ํ•œ ๋ฌธ์ œ์ด๋‹ค.

ํ•œ ๋‹ฌ ํ›„๋ฉด ๊ตญ๊ฐ€์˜ ๋ถ€๋ฆ„์„ ๋ฐ›๊ฒŒ ๋˜๋Š” ์ค€์„œ๋Š” ์—ฌํ–‰์„ ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์„ธ์ƒ๊ณผ์˜ ๋‹จ์ ˆ์„ ์Šฌํผํ•˜๋ฉฐ ์ตœ๋Œ€ํ•œ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•œ ์—ฌํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€์ง€๊ณ  ๋‹ค๋‹ ๋ฐฐ๋‚ญ ๋˜ํ•œ ์ตœ๋Œ€ํ•œ ๊ฐ€์น˜ ์žˆ๊ฒŒ ์‹ธ๋ ค๊ณ  ํ•œ๋‹ค.

์ค€์„œ๊ฐ€ ์—ฌํ–‰์— ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” N๊ฐœ์˜ ๋ฌผ๊ฑด์ด ์žˆ๋‹ค. ๊ฐ ๋ฌผ๊ฑด์€ ๋ฌด๊ฒŒ W์™€ ๊ฐ€์น˜ V๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ํ•ด๋‹น ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์–ด์„œ ๊ฐ€๋ฉด ์ค€์„œ๊ฐ€ V๋งŒํผ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์•„์ง ํ–‰๊ตฐ์„ ํ•ด๋ณธ ์ ์ด ์—†๋Š” ์ค€์„œ๋Š” ์ตœ๋Œ€ K๋งŒํผ์˜ ๋ฌด๊ฒŒ๋งŒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ๋‚ญ๋งŒ ๋“ค๊ณ  ๋‹ค๋‹ ์ˆ˜ ์žˆ๋‹ค. ์ค€์„œ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ฆ๊ฑฐ์šด ์—ฌํ–‰์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด๋“ค์˜ ๊ฐ€์น˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์•Œ๋ ค์ฃผ์ž.

โŒจ์ž…๋ ฅ

์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 โ‰ค N โ‰ค 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 โ‰ค K โ‰ค 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 โ‰ค W โ‰ค 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 โ‰ค V โ‰ค 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ชจ๋“  ์ˆ˜๋Š” ์ •์ˆ˜์ด๋‹ค.

๐Ÿ–ฅ์ถœ๋ ฅ

ํ•œ ์ค„์— ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด๋“ค์˜ ๊ฐ€์น˜ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿงํ’€์ด

4๊ฐœ์˜ ๋ฌผ๊ฑด, 7kg๊นŒ์ง€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ
๋ฌผ๊ฑด 1 6kg / 13์˜ ๊ฐ€์น˜
๋ฌผ๊ฑด 2 4kg / 8์˜ ๊ฐ€์น˜
๋ฌผ๊ฑด 3 3kg / 6์˜ ๊ฐ€์น˜
๋ฌผ๊ฑด 4 5kg / 12์˜ ๊ฐ€์น˜

using System;

namespace Baekjoon_Algorithm
{
    class Program
    {
        static void Main()
        {
            //์ฒซ๋ฒˆ ์งธ ์ž…๋ ฅ ๊ฐ’(๋ฌผํ’ˆ์˜ ์ˆ˜ N๊ฐœ, ๋ฒ„ํ‹ธ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K)
            int N;
            int K;
            int[] W;//๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ ๋ฐฐ์—ด
            int[] V;//๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ ๋ฐฐ์—ด
            int[,] DP;//DP ๋ฐฐ์—ด

            N = int.Parse(Console.ReadLine());
            K = int.Parse(Console.ReadLine());

            W = new int[N + 1];
            V = new int[N + 1];
            DP = new int[N+1, K+1];//DP ๋ฐฐ์—ด
       
            //๋ฌผํ’ˆ์˜ ์ˆ˜ ๋งŒํผ ๊ฐ€์น˜ ์ž…๋ ฅ
            for (int i = 1; i <= N; i++)
            {
                W[i] = int.Parse(Console.ReadLine());
                V[i] = int.Parse(Console.ReadLine());
            }
            //K๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ์ตœ๋Œ€์˜ ๊ฐ€์น˜ ๊ฐ’์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ์ถœ๋ ฅ
            for (int i = 1; i <= N; i++)
            {
                //๋ฌด๊ฒŒ๋งŒํผ (1, 7) ๋Œ๋ฉด์„œ
                for (int j = 1; j <= K; j++)
                {
                    if(j-W[i] >= 0)//ํ˜„์žฌ ๋ฌด๊ฒŒ์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌด๊ฒŒ ๋บ์„ ๊ฒฝ์šฐ์—๋„ ๋‚จ๋Š” ๋ฌด๊ฒŒ๊ฐ€ ์žˆ์œผ๋ฉด
                    {
                        //์ด์ „ ๋ฌผ๊ฑด์˜ ๊ฐ™์€ ๋ฌด๊ฒŒ์˜ ๊ฐ€์น˜์™€ ๋‚จ์€ ๋ฌด๊ฒŒ์˜ ๊ฐ€์น˜ ์ค‘์— ์ตœ๋Œ“๊ฐ’
                        if (Math.Max(DP[i - 1, j], DP[i - 1, j - W[i]] + V[i]) > int.MaxValue) DP[i, j] = 0;
                        else
                        {
                            DP[i, j] = Math.Max(DP[i - 1, j], DP[i - 1, j - W[i]] + V[i]);
                        }
                    }
                }
            }
            Console.WriteLine($"MAX:{DP[N, K]}");
        }
    }
}

์ถœ์ฒ˜ ๋ฐ ์ฐธ์กฐ : http://www.csharpstudy.com/
profile
์•ˆ๋…•ํ•˜์„ธ์š”. ๋ฐ์ดํ„ฐ์™€ ๋™๊ณ ๋™๋ฝ ์ค‘์ธ ๊ฐœ๋ฐœ์ž ์ž…๋‹ˆ๋‹ค.

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