균형 원소를 찾아라. [코딩테스트 Python]

시나리오

언휴는 던전을 탐험하고 있어요.

던전 안에는 n개의 보물이 같은 간격으로 직선 형태의 판자에 놓여져 있네요.

그리고 10초 이내에 균형을 잡으면 모든 보물을 준다고 쓰여 있어요.

언휴는 사물 보기 능력을 통해 보물의 무게를 볼 수 있어요.

여러분은 언휴를 도와 균형 원소를 찾으세요.

문제

난이도: 2 (easy) [1:very easy, 2:easy, 3:middle, 4: difficult, 5: very difficult]

입력 인자는 보물의 무게 컬렉션

출력은 균형 인덱스와 균형 값, 앞쪽의 무게를 리스트로 반환, 없을 때는 빈 리스트를 반환

입력: [1,2,3,4,5,2,3,5]

출력: [4,5,10]

설명:

인덱스 0~3의 합은 10이며 5~8의 합도 10입니다.

따라서 인덱스 4에 있는 값 5가 균형 값입니다.

코드

def FindBalance(nums):
    
print(FindBalance([1,2,3,4,5,2,3,5]))

솔루션

def FindBalance(nums):
    ln = len(nums) 
    if(ln==1):
        return [0,nums[0],0]
    fsum=[0]
    tsum=0
    for i in range(1,ln):
        fsum.append(fsum[i-1]+nums[i-1])
    j=0
    for i in range(ln-2,0,-1):
        tsum = tsum+nums[i+1]
        #불필요
        #while((j<ln-2) and (tsum > fsum[j])):
        #    j+=1
        #if(tsum == fsum[j])and(i==j):
        if(tsum == fsum[i]):
           return [i,nums[i],tsum]
    return []

print(FindBalance([1,2,3,4,5,2,3,5]))