๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.3 : ์—ฐ์† ํŽ„์Šค ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ (DP)

by xxilliant 2025. 4. 15.
728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/161988

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 3.

cpp ๋ฐฐ์—ด ์„ ์–ธ๋„ ๊นŒ๋จน์–ด๋ฒ„๋ ค์„œ .. ํฐ์ผ๋‚ฌ๋‹ค ใ…‹ใ…‹๋‹ค์‹œ ๋‹ค ๊ณต๋ถ€ํ•ด์•ผ์ง€

 

์ด ๋ฌธ์ œ๋Š” dp๋กœ ํ’€์–ด์•ผํ•˜๋Š”๋ฐ, ์•„์ด๋””์–ด ๋– ์˜ฌ๋ฆฌ๊ธฐ๊ธฐใ… ์กฐ๊ธˆ ํž˜๋“ค์—ˆ๋‹ค

ํŽ„์Šค ๋ฐฐ์—ด๊ณผ ์—ฐ์† ๋ถ€๋ถ„์ˆ˜์—ด์„ ๋ณด๊ณ  sliding window๋กœ ํ’€์–ด์•ผํ•˜๋‚˜? ์‹ถ์—ˆ๋Š”๋ฐ

ํ’€๋‹ค ๋ณด๋‹ˆ left๋ฅผ ์˜ฎ๊ธธ ์กฐ๊ฑด์ด ์—†์–ด์„œ ์ด๊ฒŒ ์•„๋‹Œ๊ฐ€๋ณด๋‹ค ์‹ถ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ DP๋กœ ์ตœ๋Œ“๊ฐ’์„ ์ €์žฅํ•˜๋ฉด์„œ ํ’€์—ˆ๋‹ค!

 

์ผ์ฐจ์› ๋ฐฐ์—ด์„ ๋‘๊ฐœ ์“ฐ๋ ค๋‹ค๊ฐ€, ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.

dp[][0] -> ํŽ„์Šค๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘

dp[][1] -> ํŽ„์Šค๊ฐ€ -1๋ถ€ํ„ฐ ์‹œ์ž‘

 

ํ•ญ์ƒ ์ตœ๋Œ“๊ฐ’์„ ๊ณ ๋ คํ•  ๋•Œ, ํ˜„์žฌ ์›์†Œ ์ž์‹ ์ด ์ตœ๋Œ€์ผ ๊ฒฝ์šฐ๊นŒ์ง€ ๊ณ ๋ คํ•  ๊ฒƒ!!

 

 

๋‚˜์˜ ํ’€์ด

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

long long solution(vector<int> sequence) {
    long long answer = 0;
    // dp? ์œˆ๋„์šฐ? -> ์œˆ๋„์šฐ๋Š” ๊ณ ์ • ๊ธธ์ด ํƒ์ƒ‰์— ์ ํ•ฉ. dp๋กœ ํ’€์–ด์•ผํ•จ
    long long dp[500001][2] = {0,}; // i๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ์ตœ๋Œ€ ํ•ฉ
    int nowPulse = 1;
    dp[0][0] = sequence[0];
    dp[0][1] = sequence[0] * -1;
    answer = max(dp[0][0], dp[0][1]);
    for(int i=1; i<sequence.size(); ++i){
        nowPulse *= (-1);
        long long now = sequence[i]*nowPulse;
        dp[i][0] = max(dp[i-1][0] + now, now);
        dp[i][1] = max(dp[i-1][1] - now, (-1) * now);
        if(answer < dp[i][0]) answer = dp[i][0];
        if(answer < dp[i][1]) answer = dp[i][1];
    }
    return answer;
}

728x90
๋ฐ˜์‘ํ˜•