๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Problem Solving/Algorithm, Tips

์ตœ๋Œ€ ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ

by ํ–‰๋ฑ 2020. 6. 23.

(์•„๋ž˜ ์ชฝ์— update ์žˆ์Œ)

 

์™œ ์ด ๋ฌธ์ œ๋Š” ๋ณผ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด๊ฑธ๊นŒ?

์ด ์˜์ƒ๋งŒ ๋„ค ๋‹ค์„ฏ ๋ฒˆ์€ ๋ณธ ๊ฒƒ ๊ฐ™๋‹ค.

 

https://youtu.be/OxsZKLfaWX0

 

์ปจ์…‰์€:

"์ˆ˜์˜ ํ•ฉ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌํ•˜๋Š”๋ฐ, ํ•ฉ์ด ์Œ์ˆ˜๋ฉด 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋‹ค์Œ ์ˆ˜๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค."

 

ํ•ฉ์ด ์Œ์ˆ˜์ผ ๋•Œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์€,

์ „์ฒด ๋ฐฐ์—ด ์ค‘ ์–‘์ˆ˜ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์–‘์ˆ˜๊ฐ€ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋‹ค๋ฉด ๊ทธ ์–‘์ˆ˜ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๋Š” ๊ฒŒ (์Œ์ˆ˜ ํ•ฉ๋ณด๋‹ค) ์ด๋“์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ๋˜ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋นˆํ‹ˆ์ด ์ƒ๊ธฐ๋Š”๋ฐ,

๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆ˜๊ฐ€ ์Œ์ˆ˜์ธ ๊ฒฝ์šฐ์— 0์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๊ฒฝ์šฐ๋Š” ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ (์Œ)์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๋ฌผ๋ก  0์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ํ•ญ์ƒ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆ˜๊ฐ€ ์Œ์ˆ˜์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆ˜๊ฐ€ 0์ผ ๋•Œ, ํ˜น์€ 0๊ณผ ์Œ์ˆ˜๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๊ฒฝ์šฐ์—๋„ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ๋„ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋˜์–ด๋„ ๊ดœ์ฐฎ๋‹ค.

 

์ถœ์ฒ˜๋Š” ์‚ฌ์ง„ ์•„๋ž˜ ๋งํฌ๋ž‘ ๋‚ด ์ƒ๊ฐ

 

-- update --

์œ„ ๋ฐฉ๋ฒ•์—์„œ ํ•ฉ์ด ์Œ์ˆ˜์ผ ๋•Œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์€

ํ˜„์žฌ๊นŒ์ง€์˜ ํ•ฉ์— ํ˜„์žฌ ์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๊ฒƒ์ด ์ด๋“์ธ์ง€ vs ๊ทธ๋ƒฅ ํ˜„์žฌ ์ˆ˜ ๋‹จ๋…์œผ๋กœ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ด๋“์ธ์ง€

๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด๋„ ์งค ์ˆ˜ ์žˆ์œผ๋ฉฐ

์•„๋ž˜์™€ ๊ฐ™์ด ์งค ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆ˜๊ฐ€ ์Œ์ˆ˜์—ฌ๋„ ๋‹ค์‹œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

int maxSubArray(vector<int>& nums) {
    int tmp = 0, maxv = INT_MIN;
    
    for(int i=0; i<nums.size(); i++){
        tmp += nums[i];
        tmp = max(tmp, nums[i]);
        maxv = max(tmp, maxv);
    }
    
    return maxv;
}

 

https://leetcode.com/problems/maximum-subarray/discuss/343771/cpp-faster-than-98 ์ฐธ๊ณ 

๋Œ“๊ธ€