1. 부분합
옛날에 남의 풀이를 보고도 못 풀었던 문제다...
근데 지금 다시 보니까 이딴걸 왜 못풀었지..? 라는 자괴감이 몰려온다..
부분합에 대한 원리만 알면 간단하다.
딱 두번만 주어진 문자열을 순회하면 된다!
첫번째는 순회는 [1, -1, 1 ... ] 을 적용하면서,
두번째 순회는 [-1, 1, -1 ... ] 을 적용하면서,
부분합중 최댓값을 구하면 끝이다!
2. 최종 코드
def solution(sequence):
answer = 0
partial_sum = [sequence[0]]
flag = 0
for idx in range(1, len(sequence)):
current = sequence[idx]
if(flag == 0):
current *= -1
if(partial_sum[-1] < 1):
partial_sum.append(current)
else:
partial_sum.append(current + partial_sum[-1])
flag = 1 - flag
answer = max(partial_sum)
partial_sum = [-sequence[0]]
flag = 1
for idx in range(1, len(sequence)):
current = sequence[idx]
if(flag == 0):
current *= -1
if(partial_sum[-1] < 1):
partial_sum.append(current)
else:
partial_sum.append(current + partial_sum[-1])
flag = 1 - flag
if(answer < max(partial_sum)):
answer = max(partial_sum)
return answer
3. 시간 복잡도
행위 | 시간 복잡도 |
순회 | O(2N) |
최종 | O(N) |
'코딩 테스트 (알고리즘)' 카테고리의 다른 글
[알고리즘] 베스트앨범 프로그래머스 Lv3. 파이썬 (2) | 2024.06.04 |
---|---|
[알고리즘] 부대복귀 프로그래머스 Lv3. 파이썬 (0) | 2024.05.30 |
[알고리즘] 인사고과 프로그래머스 Lv.3 파이썬 (0) | 2024.05.17 |
[알고리즘] 호텔대실 프로그래머스 Lv.2 파이썬 (0) | 2024.05.17 |