๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ‘จ‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

 

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€ \( 100,000 \times 4 \) ์ด๊ธฐ ๋•Œ๋ฌธ์— DFS์œผ๋กœ๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™๋”๋ผ๊ตฌ์š”. ์œ ๋งํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ๊ฐ€์น˜์ง€๊ธฐ๋ฅผ ํ•˜๋ฉด ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๊ธฐ์ค€์„ ์–ด์ฐŒํ•ด์•ผ ํ•  ์ง€ ๋ชจ๋ฅด๊ฒ ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๋””(Greedy)๋กœ๋„ ํ˜„์žฌ ์„ ํƒ์ง€๊ฐ€ ์ตœ์„ ์˜ ์„ ํƒ์ง€๋ผ๋Š” ๋ณด์žฅ์ด ์—†๊ธฐ์— ๋ชป ์‚ฌ์šฉํ•˜๊ตฌ์š”. ๊ทธ๋ž˜์„œ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)์„ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

 

  1. ๋•…(land)์˜ ์ฒซ ํ–‰์€ dp์— ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ด๋‘”๋‹ค.
  2. ํ˜„์žฌ ํ–‰๊ณผ ์—ด์„ row, col์ด๋ผ๊ณ  ํ•  ๋•Œ, dp[row - 1]์—์„œ col์„ ์ œ์™ธํ•œ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์•„ newDpRow์— ์ €์žฅํ•œ๋‹ค.
  3. dp์— newDpRow๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  4. 2, 3๋ฒˆ ๊ณผ์ •์„ land์˜ ๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  5. ๋‹ค ๋ฐ˜๋ณตํ–ˆ๋‹ค๋ฉด, dp์ค‘์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

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

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

#include <vector>
#include <algorithm>
using namespace std;

int GetMaxValue(const vector<int>& row, int exceptColumn) {
    int maxValue = 0;
    for (int i = 0; i < row.size(); i++) {
        if (exceptColumn == i)
            continue;
        maxValue = max(maxValue, row[i]);
    }

    return maxValue;
}

int solution(vector<vector<int>> land)
{
    vector<vector<int>> dp(1, vector<int>(land[0].begin(), land[0].end()));

    for (int row = 1; row < land.size(); row++) {
        vector<int> dpRow;

        for (int col = 0; col < land[row].size(); col++) {
            int preDpRowMaxValue = GetMaxValue(dp[row - 1], col);
            dpRow.emplace_back(preDpRowMaxValue + land[row][col]);
        }

        dp.emplace_back(dpRow);
    }

    int lastRow = dp.size() - 1;
    return *max_element(dp[lastRow].begin(), dp[lastRow].end());
}

 

 

 

 

๋‹ค๋ฅธ ๋ถ„์˜ ๋ชจ๋ฒ” ์ฝ”๋“œ ํ•™์Šต

#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<vector<int> > land)
{
    for(int i = 0; i < land.size() - 1; i++)
    {
        land[i + 1][0] += max(land[i][1], max(land[i][2], land[i][3]));
        land[i + 1][1] += max(land[i][0], max(land[i][2], land[i][3]));
        land[i + 1][2] += max(land[i][1], max(land[i][0], land[i][3]));
        land[i + 1][3] += max(land[i][1], max(land[i][2], land[i][0]));  
    }

    return *max_element(land[land.size() - 1].begin(), land[land.size() - 1].end());
}
  • max(), min() ์ด๋Ÿฐ ํ•จ์ˆ˜๋“ค์€ ์ธ์ž๋ฅผ 2๊ฐœ๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ, max({,1, 2, 3}) ์ด๋Ÿฐ ์‹์œผ๋กœ {  }๋ฅผ ํ†ตํ•ด ์ธ์ž๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด๋กœ ๋ฐ›์•„์„œ ๋™์ž‘ํ•˜๋‚˜ ๋ด…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.
  • ๋•…(land)์˜ ์ด์ „ ํ–‰์€ ๋ณผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ๋‹ค์Œ ํ–‰์—๋‹ค๊ฐ€ ํ˜„์žฌ ํ–‰์˜ ์ตœ๋Œ“๊ฐ’์„ ๋”ํ•ด์„œ ์ €์žฅํ•ด๋‘๋„ค์š”. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณ„๋„๋กœ ์•ˆ ์จ๋„ ๋˜๋‹ˆ ๊ต‰์žฅํžˆ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•