길이가 N 인 수열 A_1, A_2, ..., A_N 이 주어질 때, 이 수열의 최대 구간 합을 구해보자.
입력
첫째 줄에 정수 N (1 ≤ N ≤ 100) 이 주어진다.
둘째 줄에 정수 A_1, A_2, ..., A_N (-100 ≤ A_i ≤ 100) 이 주어진다.
출력
주어진 수열의 최대 구간 합을 출력한다.
예제 입력 1
4
-1 3 -2 4
예제 출력 1
5
예제 입력 2
3
-1 -2 -3
예제 출력 2
-1
참고
구간 합이란 수열의 연속한 부분을 합한 값이다. 예를 들어 [1, 2, 3] 의 구간 합은 [1] = 1, [1, 2] = 3, [1, 2, 3] = 6, [2] = 2, [2, 3] = 5, [3] = 3 으로 총 6개가 있다. 최대 구간 합이란 이 6개중 가장 큰 합을 말한다.
수열의 원소가 모두 음수가 아니라면 당연히 최대 구간 합은 모든 원소의 합과 같다. 하지만 수열에 음수가 포함된다면 그렇지 않을 수도 있다. 예를 들어, [-1, 3, -2, 4] 의 최대 구간 합은 [3, -2, 4] = 5 이다.
그러므로 모든 구간에 대해서 구간 합을 구해서 그 중 가장 큰 구간 합을 찾아야 한다. 가능한 구간의 개수는 총 ~N^{2}~개 있다.
누적 합 배열(Prefix sum array)를 사용하면 구간 합을 빠르게 구할 수 있다. 어떤 구간의 시작과 끝이 L, R (1 ≤ L ≤ R ≤ N) 일 때 누적 합 배열 P_1, P_2, ..., P_N 을 이용하면 A_L + A_{L+1} + ... + A_R 을 P_R - P_{L-1} 을 통해서 구할 수 있다.
** P_{L-1} 에서 L - 1 이 배열의 인덱스를 벗어날 수도 있는 것에 유의한다.**
| 순위 | 사용자 | 언어 | 시간 | 메모리 | 코드 길이 |
|---|---|---|---|---|---|
| 🥇 | 202104340_김재덕 | C | 103ms | 940KB | 459B |
| 🥈 | 202202658_황현석 | C++ | 146ms | 1876KB | 340B |
| 🥉 | 202302534_김승현 | Python | 434ms | 10368KB | 488B |
| 4 | 202402751_한현욱 | Python | 435ms | 10368KB | 370B |
| 5 | 202102700_정민용 | Python | 439ms | 10368KB | 397B |
| 6 | 202401828_백성현 | Python | 442ms | 10240KB | 234B |
| 7 | 202102659_안우진 | Python | 443ms | 10240KB | 235B |
| 8 | 202402699_오태영 | Python | 477ms | 10240KB | 277B |
| 9 | 202200884_이선기 | Python | 543ms | 10496KB | 280B |
| 10 | 202102622_김우솔 | Java | 964ms | 26752KB | 976B |
| 11 | 202102717_최성윤 | Java | 968ms | 26752KB | 840B |
| 12 | 202301773_이종현 | Java | 970ms | 25648KB | 746B |
| 13 | 202302538_김유승 | Java | 988ms | 25628KB | 978B |
| 14 | 안유진 | Java | 1007ms | 25636KB | 944B |
| 15 | 202302590_이동하 | Java | 1015ms | 25616KB | 870B |
| 16 | 202002511_송준원 | Java | 1016ms | 26624KB | 863B |
| 17 | 201802070_김시온 | Java | 1050ms | 26364KB | 1096B |
| 18 | 202202596_배인수 | Java | 1052ms | 25620KB | 714B |
| 19 | 202302584_유희찬 | Java | 1200ms | 27836KB | 555B |
| 20 | 202102553_윤서웅 | Java | 1205ms | 28160KB | 623B |
| # | 사용자 | 결과 | 언어 | 시간 | 메모리 | 코드 길이 | 제출 시간 |
|---|---|---|---|---|---|---|---|
| 3258 | 202402656_김영수 | 오답 | Java | 1203ms | 28160KB | 684B | 2024. 05. 02. 11:47 |
| 3256 | 202402665_김진하 | 정답 | Java | 1207ms | 28288KB | 565B | 2024. 05. 02. 11:45 |
| 3255 | 202402665_김진하 | 컴파일 에러 | Python | - | - | 565B | 2024. 05. 02. 11:44 |
| 3254 | 202402656_김영수 | 오답 | Java | 1206ms | 28160KB | 685B | 2024. 05. 02. 11:41 |
| 3252 | 202402656_김영수 | 오답 | Java | 1204ms | 28032KB | 679B | 2024. 05. 02. 11:41 |
| 3251 | 202102635_문일광 | 컴파일 에러 | Python | - | - | 298B | 2024. 05. 02. 11:40 |
| 3250 | 202102635_문일광 | 컴파일 에러 | Python | - | - | 298B | 2024. 05. 02. 11:40 |
| 3249 | 202102635_문일광 | 컴파일 에러 | Python | - | - | 291B | 2024. 05. 02. 11:40 |
| 3248 | 202102635_문일광 | 컴파일 에러 | Python | - | - | 292B | 2024. 05. 02. 11:40 |
| 3242 | 202402656_김영수 | 오답 | Java | 1249ms | 28160KB | 685B | 2024. 05. 02. 11:38 |
| 3238 | 202402755_황은영 | 정답 | Java | 1231ms | 28160KB | 611B | 2024. 05. 02. 11:36 |
| 3233 | 202402664_김지후 | 정답 | Java | 1213ms | 28032KB | 974B | 2024. 05. 02. 11:34 |
| 3232 | 202402755_황은영 | 컴파일 에러 | Java | - | - | 668B | 2024. 05. 02. 11:34 |
| 3231 | 202402656_김영수 | 오답 | Java | 1270ms | 28032KB | 684B | 2024. 05. 02. 11:34 |
| 3230 | 202402664_김지후 | 오답 | Java | 1252ms | 28032KB | 974B | 2024. 05. 02. 11:33 |
| 3227 | 202402656_김영수 | 오답 | Java | 1241ms | 28288KB | 685B | 2024. 05. 02. 11:32 |
| 3226 | 202102635_문일광 | 런타임 에러 | Python | 437ms | 10240KB | 286B | 2024. 05. 02. 11:32 |
| 3225 | 202402656_김영수 | 컴파일 에러 | Python | - | - | 685B | 2024. 05. 02. 11:31 |
| 3223 | 202102635_문일광 | 오답 | Python | 441ms | 10240KB | 285B | 2024. 05. 02. 11:31 |
| 3219 | 202402656_김영수 | 컴파일 에러 | Python | - | - | 685B | 2024. 05. 02. 11:29 |