728x90
SMALL
안녕하세요 남갯입니다.
public static int solution(int[] A) {
// write your code in Java SE 8
int maxEnding = 0;
int maxSlice = Integer.MIN_VALUE;
int maxValue = Integer.MIN_VALUE;
for (int a : A) {
// a> 0이면서 maxEnding or maxSlice 0보다 작다는건 음수값에서 양수값인 값이 나왔을때
if ((maxEnding < 0 || maxSlice < 0) && a > 0) {
maxValue = maxSlice;
maxSlice = 0;
maxEnding = 0;
}
maxEnding = Math.max(Integer.MIN_VALUE, maxEnding + a);
maxSlice = Math.max(maxSlice, maxEnding);
if (a > maxValue) {
maxValue = a;
}
if (maxSlice > maxValue) {
maxValue = maxSlice;
}
}
return (maxValue > maxSlice) ? maxValue : maxSlice;
}
맨 마지막 값이 나오지 않음
https://app.codility.com/demo/results/training8BHT5Q-GCD/
오버플로우 방지
public static int solution(int[] A) {
// write your code in Java SE 8
long maxEnding = 0;
long maxSlice = Integer.MIN_VALUE;
long maxValue = Integer.MIN_VALUE;
for (int a : A) {
// a> 0이면서 maxEnding or maxSlice 0보다 작다는건 음수값에서 양수값인 값이 나왔을때
if ((maxEnding < 0 || maxSlice < 0) && a > 0) {
maxValue = maxSlice;
maxSlice = 0;
maxEnding = 0;
}
maxEnding = Math.max(Integer.MIN_VALUE, maxEnding + a);
maxSlice = Math.max(maxSlice, maxEnding);
if (a > maxValue) {
maxValue = a;
}
if (maxSlice > maxValue) {
maxValue = maxSlice;
}
}
return (maxValue > maxSlice) ? (int)(maxValue) : (int)(maxSlice);
}
728x90
LIST
'IT > 알고리즘' 카테고리의 다른 글
[코딜리티] - Lesson 9.MaxDoubleSliceSum (2) | 2019.09.25 |
---|---|
[코딜리티] - Lesson 10.CountFactors (0) | 2019.09.23 |
[코딜리티] - Lesson 9.MaxProfit (0) | 2019.09.16 |
[코딜리티] - Lesson 8.Dominator (0) | 2019.09.16 |
[코딜리티] - Lesson 7.StoneWall (0) | 2019.09.09 |