https://www.hackerrank.com/challenges/maxsubarray/problem?isFullScreen=true
The Maximum Subarray | HackerRank
Given an array find the maximum possible sum of two types of subsequences.
www.hackerrank.com
#!/bin/python3
import math
import os
import random
import re
import sys
def maxSubarry(arr):
maxSub = 0
sum_list = []
for ar in range(len(arr)):
if maxSub + arr[ar] < 0: #합이 0보다 적어지는 순간
sum_list.append(maxSub) #기존 합을 리스트에 저장
maxSub = 0 #합을 0으로 초기화
else:
if arr[ar]<0: #합이 0보다 큰데 인자가 음수면
sum_list.append(maxSub) #기존 합을 저장하고
maxSub += arr[ar] #진행
else:
maxSub += arr[ar] #아니라면 진행
sum_list.append(maxSub) #모두 양수인걸 대비해서 맨마지막에 저장
sum_set = set(sum_list) #중복된거 없애주고
if max(sum_set) == 0: #최대치가 0이라는 뜻은 arr이 전부 음수였다는 뜻(또는 0)
return max(arr) #그러면 음수중 최대값을 돌려주고
else:
return max(sum_set) #아니라면 set안에서 최대값을 돌려주고
def maxSubsequence(arr):
seq_sum = 0
for ar in arr:
if ar >0 : #양수인 값만 계속 더해주고
seq_sum += ar
else:
pass
if seq_sum > 0: #만약 합이 0보다 크면
return seq_sum #그대로 돌려주고
else: #아니라면 전부 음수였거나 0이거나
return max(arr) #그중 최대값을 돌려주고
def maxSub(arr):
# Write your code here
MSA = maxSubarry(arr)
MSS = maxSubsequence(arr)
return [MSA, MSS]
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
t = int(input().strip())
for t_itr in range(t):
n = int(input().strip())
arr = list(map(int, input().rstrip().split()))
result = maxSub(arr)
fptr.write(' '.join(map(str, result)))
fptr.write('\n')
fptr.close()
'파이썬 코딩테스트 > 해커랭크' 카테고리의 다른 글
HackerRank / Sherlock and Array / Python (0) | 2021.12.24 |
---|---|
HackerRank / Sherlock and Cost / Python (0) | 2021.12.24 |
HackerRank / Fibonacci Modified / Python (0) | 2021.12.22 |
HackerRank / Prim's(MST) : Special SubTree / Python (0) | 2021.12.12 |
HackerRank / Jack goes to Rapture / Python (0) | 2021.12.12 |