๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/10211)
<Maximum Subarray>
๋ฌธ์
ํฌ๊ธฐ N์ธ ์ ์ํ ๋ฐฐ์ด X๊ฐ ์์ ๋, X์ ๋ถ๋ถ ๋ฐฐ์ด(X์ ์ฐ์ํ ์ผ๋ถ๋ถ) ์ค ๊ฐ ์์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๋ถ๋ถ
๋ฐฐ์ด์ ์ฐพ๋ Maximum subarray problem(์ต๋ ๋ถ๋ถ ๋ฐฐ์ด ๋ฌธ์ )์ ์ปดํจํฐ ๊ณผํ์์ ๋งค์ฐ ์ ์๋ ค์ ธ ์๋ค.
์ฌ๋ฌ๋ถ์ N๊ณผ ๋ฐฐ์ด X๊ฐ ์ฃผ์ด์ก์ ๋, X์ maximum subarray์ ํฉ์ ๊ตฌํ์.
์ฆ, max1 โค i โค j โค N (X [i]+...+X [j])๋ฅผ ๊ตฌํ์.
์ ๋ ฅ
์ ๋ ฅ ํ์ผ์ ์ฒซ ๋ฒ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ์๋ฅผ ์๋ฏธํ๋ ์์ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค.
๊ทธ๋ค์์๋ T๊ฐ์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์ฃผ์ด์ง๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค ๋ณ๋ก ์ฒซ ๋ฒ์งธ ์ค์ ๋ฐฐ์ด์ ํฌ๊ธฐ N์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 1,000)
๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์ค์ ๋ฐฐ์ด X์ ๋ด์ฉ์ ๋ํ๋ด๋ N๊ฐ์ ์ ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค.
์ด๋ ์ฃผ์ด์ง๋ ์๋ ์ ๋๊ฐ์ด 1,000๋ณด๋ค ์์ ์ ์์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค ๋ณ๋ก maximum subarray์ ํฉ์ ์ค๋ก ๊ตฌ๋ถํ์ฌ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution
import sys
if __name__=='__main__':
T=int(input()) # ํ
์คํธ ์ผ์ด์ค ์
for i in range(T):
N=int(input()) # ํฌ๊ธฐ
arr=list(map(int, sys.stdin.readline().split())) # X์ ๋ด์ฉ
maxsum=min(arr) # ์ต์๊ฐ์ maximum์ผ๋ก ์ค์
for j in range(len(arr)):
sum = 0
for k in range(j,len(arr)):
sum+=arr[k]
if sum>maxsum: # maximum subarray ์ฐพ๊ธฐ
maxsum=sum
print(maxsum)
- Maximum subarray๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ฐ๋ณต๋ฌธ ํ์ฉ
- ์ด์ค ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ์ฌ ๊ฐ ๊ตฌ๊ฐ๋ง๋ค maximum์ธ์ง ํ์ธ
์๊ฐ๐ค
์ด์ค for๋ฌธ์ ํ์ฉํ์ฌ ๊ตฌํํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊น ๋ด ๊ณ ๋ฏผํ์ง๋ง, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด์ง ์์ ์ฒ์ ์๊ฐ๋๋ก
๊ตฌํํด๋ณด์๋ค. ์ฒ์์ maxsum์ ์ด๊ธฐํํ ๋ 0์ผ๋ก ์ด๊ธฐํ๋ฅผ ์๋ชปํด์ค ๊ฒ ๋ง๊ณ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ์ด ์์๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 7795_๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ (0) | 2022.01.04 |
---|---|
[Baekjoon] 14426_์ ๋์ฌ ์ฐพ๊ธฐ (0) | 2021.12.27 |
[Baekjoon] 13417_์นด๋ ๋ฌธ์์ด (0) | 2021.10.20 |
[Baekjoon] 11399_ATM (0) | 2021.10.20 |
[Baekjoon] 1662_์์ถ (0) | 2021.10.10 |