๋ฌธ์ ๋งํฌ
https://leetcode.com/problems/k-concatenation-maximum-sum/description/
๋ฌธ์ ์์ฝ
์ ์ ๋ฐฐ์ด์ธ arr
๊ณผ ์ ์ k
๊ฐ ์ฃผ์ด์ง๋ค.
arr
์ k
๋งํผ ๋ฐ๋ณตํด์ ๋ฐฐ์ด์ ์์ ํ๋ค.
์๋ฅผ ๋ค์ด, arr = [1, 2]
์ด๊ณ k = 3
์ผ ๊ฒฝ์ฐ ์์ ๋ ๋ฐฐ์ด์ [1, 2, 1, 2, 1, 2]
์ด ๋๋ค.
๋ค์์ผ๋ก ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ฐฐ์ด ์์์ sub-array ๋ฅผ ๊ตฌํ๋ค.
์๋ฅผ ๋ค์ด, [1, 2, 1, 2, 1, 2]
์ด ์๋ค๊ณ ํ ๊ฒฝ์ฐ sub-array ๋ [1, 2, 1]
, [2, 1, 2]
๋ฑ ์ฌ๋ฌ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ฐ๋ผ์, ๋ง๋ค ์ ์๋ sub-array ์ ๋ฐฐ์ด ์ค์์ ์์์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๊ฐ์ ๊ตฌํ๋ฉด ๋๋ค.
์์ ์์์์ sub-array ์ ์์์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๊ฒฝ์ฐ๋ [1, 2, 1, 2, 1, 2]
๊ฐ ๋์ด ์ต๋๊ฐ ๋๋ sub-array ์ ํฉ์ 9
๊ฐ ๋๋ค.
์ด๋ ๊ฒ ์ฃผ์ด์ง ๋ฐฐ์ด๊ณผ k ๊ฐ์ ํตํด sub-array ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ ์ค ์์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
์กฐ๊ฑด์ ๋ณด๋ฉด arr ์ ๊ธธ์ด๋ ์ต๋ 10^5
๊ทธ๋ฆฌ๊ณ k ๋ ์ต๋ 10^5
์ ๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ต๋ arr ์ ๊ธธ์ด๊ฐ 10^10
์ด ๋๋ค.
๋ฐ๋ผ์ ํฉ์ด ๋๋ฌด ํด ๊ฒฝ์ฐ ๋ชจ๋๋ฌ ์ฐ์ฐ์ ํตํด (10**9)+7
๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฐํํด์ค๋ค.
ํ ๊ฐ์ง ์ ์ํ๋ฉด์ ํ์ด์ผ ํ ๋ถ๋ถ์ ๋ง์ด๋์ค์ธ ์ ์๊ฐ ์จ๋ค๊ณ ํด๋ ์ ์ธํ๋ฉด ์๋๋ค๋ ์ ์ด๋ค.
์๋ฅผ ๋ค์ด, [-1, -1, 1, 2, 3, -1, -1, 1, 2, 3]
์ผ ๊ฒฝ์ฐ ์์์ ํฉ์ด ์ต๋๊ฐ ๋๋ sub-array ๋ ์ ์ฒด๊ฐ ๋์ด ๋ชจ๋ ์์๋ฅผ ๋ํ 10
์ด ๋๋ค.
๋ฌธ์ ํ์ด
์ฒซ ๋ฒ์งธ ์๋ - ์คํจ
์ฒซ ๋ฒ์งธ ์๋์์๋ k ๋งํผ ๋ฐ๋ณต๋ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ํฉ๊ณ๋ฅผ ๊ตฌํด์ฃผ๋ฉด์ ์ต๋๊ฐ ๋๋ ํฉ๊ณ๋ฅผ ๋ฐํํ๋ ค๊ณ ํ์๋ค.
ํ
์คํธ ์ฝ๋์์๋ ๋ค ํต๊ณผํ์ง๋ง ์ ๋ต์ผ๋ก ์ ์ถํ๋ ๋ฐฐ์ด์ ๋ง๋๋ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด Runtime Error ๊ฐ ๋ฐ์ํ๋ค.
-
์คํจํ ์ฝ๋
class Solution: def kConcatenationMaxSum(self, arr: List[int], k: int) -> int: modulo = (10 ** 9) + 7 k_arr = arr * k sum = 0 max_sum = 0 for i in range(len(k_arr)): sum += k_arr[i] if sum < 0: sum = 0 max_sum = max(max_sum, sum) return max_sum % modulo
-
Runtime Error
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ์ด์ค ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํด์ฃผ์์ง๋ง ์ฌ์ ํ Time Limit Exceeded ๊ฐ ๋ฐ์ํ๋ค.
๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ๊ณ์ฐ์ ํ๋ค๋ณด๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)
์ด๊ณ ๋ฐฐ์ด์ ์ต๋ ๊ธธ์ด๋ก ์ธํด์ ์๊ฐ ์ด๊ณผ๋ผ ๋ฐ์ํ๋ ๊ฒ ๊ฐ๋ค.
์ ์ถ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ด๋ k ๊ฐ 57011 ์ธ ๊ฒฝ์ฐ์ ์ผ์ด์ค์ ๋ํด์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค๊ณ ๋์จ๋ค.
๊ฒฐ๊ตญ์๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ฐพ์๋ด์ผํ ๊ฒ ๊ฐ๋ค.
๋ ๋ฒ์งธ ์๋ - ์ฑ๊ณต
๋ ๋ฒ์งธ ์๋์์๋ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ์๋ ์๊ฐ์ด ๋๋ฌด ์ค๋๊ฑธ๋ฆฐ๋ค๊ณ ์๊ฐํด ์ชผ๊ฐ์ ๊ณ์ฐ์ ํด์ค์ผํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ฌ๋ฌ ํ
์คํธ ์ผ์ด์ค๋ค์ ํตํด ์ด๋ค ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋์ง์ ๋ํด์ ์ฐพ์๋ณด์๋ค.
-
k = 1
์ธ ๊ฒฝ์ฐarr = [-5,-2,0,0,3,9,-2,-5,4] k = 1
์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ด ํ๋ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ์์์ sub-array ์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํด์ผ ํ๋ค.
-
k = 2
์ธ ๊ฒฝ์ฐarr = [1, -3, -4, 1] k = 2
์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ sub-array ๊ฐ 2๊ฐ์ ๋ฐฐ์ด๋ง ํฌํจํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ํฉ์ ๊ตฌํด์ ๋ํด์ฃผ์ด์ผ ํ๋ค.
-
k = 2
์ด์ง๋ง sub-array ๊ฐํ๋์ ๋ฐฐ์ด
์๋ง ํฌํจ๋๋ ๊ฒฝ์ฐarr = [-2, -3, 7, -1] k = 2
์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ์๋
sub-array
๋ฅผ ์ฐพ์๋ณด๋ฉด ์์๊ฐ ํ๋๋ฐ์ ์๋ ๊ฒ์ ํ์ธํ๊ณ k = 1 ์ธ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฉด ๋๋ค.
-
k >= 3
์ด๊ณ sub-array ๊ฐ๋ชจ๋ ๋ฐฐ์ด
์ ํฌํจ๋๋ ๊ฒฝ์ฐarr = [-5,-2,0,0,3,9,-2,-5,4] k = 4
์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐฐ์ด์ ๋ค ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ๋์ ์๋ ๋ฐฐ์ด์ ํฉ๊ณผ ๊ฐ์ด๋ฐ ์๋ ๋ฐฐ์ด์ ํฉ์ ๊ตฌํด์ ๋ํด์ฃผ์ด์ผ ํ๋ค.
-
k >= 3
์ด์ง๋ง sub-array ๊ฐ๋ ๊ฐ์ ๋ฐฐ์ด
์๋ง ํฌํจ๋๋ ๊ฒฝ์ฐarr = [1,-2,1] k = 5
์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ
sub-array
๊ฐ 2๊ฐ์ ๋ฐฐ์ด์๋ง ํฌํจ๋๊ธฐ ๋๋ฌธ์ k = 2 ์ธ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฉด ๋๋ค.
-
k >= 3
์ด์ง๋ง sub-array ๊ฐํ๋์ ๋ฐฐ์ด
์๋ง ํฌํจ๋๋ ๊ฒฝ์ฐarr = [-5,4,-4,-3,5,-3] k = 3
์ด ์ผ์ด์ค์ ๊ฒฝ์ฐ์๋
sub-array
๋ฅผ ์ฐพ์๋ณด๋ฉด ์์๊ฐ ํ๋๋ฐ์ ์๋ ๊ฒ์ ํ์ธํ๊ณ k = 1 ์ธ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํฉ์ ๊ตฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ํ๋์ ์กฐ๊ฑด์ ํ์ธํ ์ ์๋ ๊ฒ์ ๊ฐ์ด๋ฐ ๋ฐฐ์ด์ ํฉ์ด ์์๊ฐ ๋๋ฏ๋ก ๊ฐ์ด๋ฐ ๋ฐฐ์ด์ ํฉ์ด ์์๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ ํฉ์ ๊ตฌํด์ค ์ ์๋ค.
-
์ด ์ธ์ ํ ์คํธ ์ผ์ด์ค๋ค
- ๋ชจ๋ ๋ฐฐ์ด์ ์์๊ฐ 10000 ์ธ ๊ฒฝ์ฐ
- ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋ชจ๋ ํฉ์ ๋ํด์ ๋ชจ๋๋ฌ ์ฐ์ฐ์ ํตํด sub-array ์ ํฉ์ ๊ตฌํด์ฃผ์๋ค.
- ๋ฐฐ์ด์ ์์๊ฐ ๋ชจ๋ ์์์ธ ๊ฒฝ์ฐ
- ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๊ฒ 0 ์ผ๋ก ๋ฐํํด์ค๋ค.
- ๋ชจ๋ ๋ฐฐ์ด์ ์์๊ฐ 10000 ์ธ ๊ฒฝ์ฐ
์์ ๊ฐ์ ์ฌ๋ฌ ์ผ์ด์ค๋ค์ ์ ๋ฆฌํ๊ณ ๋์ ์ด๋ฌํ ๊ณผ์ ์ ์ฝ๋๋ก ์ฎ๊ฒผ๋ค.
๋จผ์ k = 1 ์ธ ๊ฒฝ์ฐ ํ๋์ ๋ฐฐ์ด์์ sub-array ์ ์ต๋ ํฉ์ ๊ตฌํด์ฃผ์๋ค.
# k = 1 ์ธ ๊ฒฝ์ฐ ํ๋์ ๋ฐฐ์ด์์ ์ต๋ ํฉ๊ณ ๊ตฌํ๊ธฐ
def max_subarray_sum(arr: List[int]):
cur_sum = 0
max_sum = 0
for num in arr:
cur_sum = max(num, num+cur_sum)
max_sum = max(max_sum, cur_sum)
return max_sum
๊ทธ๋ฆฌ๊ณ ๋ค์์ผ๋ก k ๊ฐ 2 ์ด์์ด ๊ฒฝ์ฐ ์ ๋์ ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๋ณ๋๋ก ํฉ์ ๊ณ์ฐํด์ฃผ์ด์ผ ํ๋ค.
์ฒซ ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ง์ง๋ง ์์๋ถํฐ ํฉ์ ๊ตฌํด์ผํ๊ณ ๋ง์ง๋ง ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฒ์ ์์๋ถํฐ ํฉ์ ๊ตฌํด์ค์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํฉ์ ๊ตฌํด์ผ ํ๋ค.
๋ฐ๋ผ์, ์ด์ ๊ฐ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ฃผ์๋ค.
# k = 2 ์ด์์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ์์ ๋ฐฐ์ด์ ์ต๋ ํฉ๊ณ ๊ตฌํ๊ธฐ
# index = 0 ๋ถํฐ ์ต๋ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
def max_prefix_sum(arr: List[int]):
max_sum = 0
cur_sum = 0
for num in arr:
cur_sum += num
max_sum = max(cur_sum, max_sum)
return max_sum
# k = 2 ์ด์์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ค์ ๋ฐฐ์ด์ ์ต๋ ํฉ๊ณ ๊ตฌํ๊ธฐ
# index = len(arr) ๋ถํฐ ์ต๋ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
def max_suffix_sum(arr: List[int]):
max_sum = 0
cur_sum = 0
for num in reversed(arr):
cur_sum += num
max_sum = max(cur_sum, max_sum)
return max_sum
์ด์ ๊ฐ ๊ฒฝ์ฐ์ ๋ํด์ ๊ณ์ฐ์ ํด์ฃผ๋ฉด ๋๋ค.
k = 1 ์ธ ๊ฒฝ์ฐ
- ํ๋์ ๋ฐฐ์ด๋ง ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ arr ์์์ sub-array ์ ํฉ์ ๊ตฌํ๋ค.
max_one_sum = max_subarray_sum(arr=arr)
# k = 1 ์ธ ๊ฒฝ์ฐ ํ๋์ ๋ฐฐ์ด ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ฐฐ์ด ์์ subarray ์ ํฉ์ ๊ตฌํ๋ค.
if k == 1:
return max_one_sum
k = 2 ์ธ ๊ฒฝ์ฐ
- sub-array ๊ฐ ํ๋์ ๋ฐฐ์ด ์์ ์๋ ๊ฒฝ์ฐ์ 2๊ฐ์ ๋ฐฐ์ด์ ํฌํจ๋์ด์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ ํฉ์ ๊ตฌํด์ค๋ค.
# ๋ชจ๋๋ฌ ์ฐ์ฐ์ ์ํ ๊ณ์ฐ
modulo = (10 ** 9) + 7
# k = 2 ์ธ ๊ฒฝ์ฐ ๋ ๊ฐ์ ๋ฐฐ์ด์ด ๋ถ๊ธฐ ๋๋ฌธ์ ์์ ๋ฐฐ์ด๊ณผ ๋ค์ ๋ฐฐ์ด์ ํฉ๊ณ๋ฅผ ๊ตฌํด์ผ ํ๋ค.
if k == 2:
return max(max_one_sum, max_pre_sum + max_suf_sum) % modulo
k >= 3 ์ธ ๊ฒฝ์ฐ
- ๋จผ์ ์ค๊ฐ ๋ฐฐ์ด์ ๋ชจ๋ ํฉ์ ๊ตฌํด์ค๋ค. ์ด ๋, ์ค๊ฐ ๋ฐฐ์ด์ ๋ชจ๋ ํฉ์ ์, ๋ค ๋ฐฐ์ด์ ์ ์ธํ k-2 ๊ฐ์ ๋ฐฐ์ด์ด ๋๋ค.
- ์ค๊ฐ ๋ฐฐ์ด์ ๋ชจ๋ ํฉ์ด ์์์ด๋ฉด sub-array ๊ฐ ํ๋์ ๋ฐฐ์ด์ ํฌํจํ๋ ๊ฒฝ์ฐ์ 2๊ฐ์ ๋ฐฐ์ด์ ํฌํจํ๋ ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค.
- ์ค๊ฐ ๋ฐฐ์ด์ ๋ชจ๋ ํฉ์ด ์์์ด๋ฉด sub-array ๊ฐ ์ ์ฒด ๋ฐฐ์ด์ ํฌํจ๋๋ ๊ฒฝ์ฐ์ ํ๋์ ๋ฐฐ์ด์ ํฌํจ๋๋ ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค.
# ๋ชจ๋๋ฌ ์ฐ์ฐ์ ์ํ ๊ณ์ฐ
modulo = (10 ** 9) + 7
# k > 3 ์ธ ๊ฒฝ์ฐ ์, ๋ค์ ๋ฐฐ์ด์ ๋ํ ํฉ๊ณผ ์ค๊ฐ ๋ฐฐ์ด์ ํฉ์ ๋น๊ตํ๋ค.
# ๊ฐ์ด๋ฐ ๋ฐฐ์ด์ ํฉ์ด 0๋ณด๋ค ์์ผ๋ฉด ๋ฐฐ์ด์ด ํ๋์ผ ๊ฒฝ์ฐ์ 2๊ฐ์ผ ๊ฒฝ์ฐ๋ฅผ ๋น๊ตํด์ ํฉ์ ๊ตฌํ๋ค.
else:
# ๊ฐ์ด๋ฐ ๋ฐฐ์ด์ ํฉ, ์ ๋ค์ ๋ฐฐ์ด์ด 2๊ฐ ๋น ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์๋ k-2 ์ด๋ค.
max_mid_sum = sum(arr) * (k-2)
if max_mid_sum < 0:
return max(max_one_sum, max_pre_sum + max_suf_sum) % modulo
else:
return max(max_one_sum, max_pre_sum + max_suf_sum + max_mid_sum) % modulo
์ ์ถ ๋ต์
class Solution:
def kConcatenationMaxSum(self, arr: List[int], k: int) -> int:
# k = 1 ์ธ ๊ฒฝ์ฐ ํ๋์ ๋ฐฐ์ด์์ ์ต๋ ํฉ๊ณ ๊ตฌํ๊ธฐ
def max_subarray_sum(arr: List[int]):
cur_sum = 0
max_sum = 0
for num in arr:
cur_sum = max(num, num+cur_sum)
max_sum = max(max_sum, cur_sum)
return max_sum
# k = 2 ์ด์์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ์์ ๋ฐฐ์ด์ ์ต๋ ํฉ๊ณ ๊ตฌํ๊ธฐ
# index = 0 ๋ถํฐ ์ต๋ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
def max_prefix_sum(arr: List[int]):
max_sum = 0
cur_sum = 0
for num in arr:
cur_sum += num
max_sum = max(cur_sum, max_sum)
return max_sum
# k = 2 ์ด์์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ค์ ๋ฐฐ์ด์ ์ต๋ ํฉ๊ณ ๊ตฌํ๊ธฐ
# index = len(arr) ๋ถํฐ ์ต๋ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
def max_suffix_sum(arr: List[int]):
max_sum = 0
cur_sum = 0
for num in reversed(arr):
cur_sum += num
max_sum = max(cur_sum, max_sum)
return max_sum
# ๋ชจ๋๋ฌ ์ฐ์ฐ์ ์ํ ๊ณ์ฐ
modulo = (10 ** 9) + 7
k_max_sum = 0
max_one_sum = max_subarray_sum(arr=arr)
# k = 1 ์ธ ๊ฒฝ์ฐ ํ๋์ ๋ฐฐ์ด ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ฐฐ์ด ์์ subarray ์ ํฉ์ ๊ตฌํ๋ค.
if k == 1:
return max_one_sum
max_pre_sum = max_prefix_sum(arr=arr)
max_suf_sum = max_suffix_sum(arr=arr)
max_all_sum = sum(arr)
# k = 2 ์ธ ๊ฒฝ์ฐ ๋ ๊ฐ์ ๋ฐฐ์ด์ด ๋ถ๊ธฐ ๋๋ฌธ์ ์์ ๋ฐฐ์ด๊ณผ ๋ค์ ๋ฐฐ์ด์ ํฉ๊ณ๋ฅผ ๊ตฌํด์ผ ํ๋ค.
if k == 2:
return max(max_one_sum, max_pre_sum + max_suf_sum) % modulo
# k > 3 ์ธ ๊ฒฝ์ฐ ์, ๋ค์ ๋ฐฐ์ด์ ๋ํ ํฉ๊ณผ ์ค๊ฐ ๋ฐฐ์ด์ ํฉ์ ๋น๊ตํ๋ค.
# ๊ฐ์ด๋ฐ ๋ฐฐ์ด์ ํฉ์ด 0๋ณด๋ค ์์ผ๋ฉด ๋ฐฐ์ด์ด ํ๋์ผ ๊ฒฝ์ฐ์ 2๊ฐ์ผ ๊ฒฝ์ฐ๋ฅผ ๋น๊ตํด์ ํฉ์ ๊ตฌํ๋ค.
else:
# ๊ฐ์ด๋ฐ ๋ฐฐ์ด์ ํฉ, ์ ๋ค์ ๋ฐฐ์ด์ด 2๊ฐ ๋น ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์๋ k-2 ์ด๋ค.
max_mid_sum = sum(arr) * (k-2)
if max_mid_sum < 0:
return max(max_one_sum, max_pre_sum + max_suf_sum) % modulo
else:
return max(max_one_sum, max_pre_sum + max_suf_sum + max_mid_sum) % modulo
- ์คํ ๊ฒฐ๊ณผ