728x90
#1912
n=int(input())
num = list(map(int,input().split()))
sum_list=[num[0]]
for i in range(len(num) - 1):
sum_list.append(max(sum_list[i] + num[i + 1], num[i + 1]))
print(max(sum_list))
처음에는 list에 n개의 숫자들을 담아두고 1개의 합을 새로운 list에 넣고 연속된 2개의 합을 새로운 list에 넣는 과정을 갯수를 증가시키며 반복하여 연속된 n개의 합까지 전부 새로운 list에 넣어서 그중 max값을 찾아서 결과를 찾으려고 했다. 그러나 코드의 효율성이 너무 안좋을 것으로 예상이 가서 새로운 방식을 고민해보았다.
그렇게 고안한 것이 모든 값을 전부 리스트에 넣는 것은 너무 비효율 적이므로 초기 리스트의 0번 인덱스의 값은 새로운 리스트에 넣어두고 초기 리스트의 1번 인덱스와 0,1번 인데스의 합을 비교하여 더 큰 값을 새로운 리스트의 1번 인덱스에 넣는다. 0+1이 더 큰경우 0+1+2와 2를 비교하게 되고 더 큰값을 새로운 리스트의 2번 인덱스에 넣는다. 이때 x+y는 초기 리스트의 x번 인덱스의 값과 y번 인덱스의 값의 합을 의미한다. 이런식으로 다음 값 하나가 더 크면 그 값을 새로운 리스트에 넣고 다음 값을 지금까지의 최대값에 더한것이 더크면 해당 값을 넣는 방식으로 큰 값들을 새로운 리스트에 넣는다.
이후에 새로운 리스트에서 max()함수를 이용하여 10개의 최대값 후보에서 진짜 최대값을 추출할 수 있다.
728x90
'Sketch (Programming Language) > Python' 카테고리의 다른 글
Baekjoon Training #2563 (0) | 2023.01.07 |
---|---|
Baekjoon Training #2738 (0) | 2023.01.05 |
Baekjoon Training #1931 (0) | 2022.12.26 |
Baekjoon Training #24499 (0) | 2022.11.09 |
Baekjoon Training #2805 (0) | 2022.11.05 |