알고리즘

[프로그래머스] 연속 부분 수열 합의 개수

hminor 2023. 6. 20. 13:53

 

# 원래 dic의 값이 0 이 아닐때도 조건문을 통해 제어를 했는데 굳이 인가 싶어서 뺌
# 아래 코드보다 시간 효율이 더 좋음

def solution(elements):
    dic, ln = {i:0 for i in range(sum(elements)+1)}, len(elements)
    for i in range(ln):
        hap = elements[i]
        dic[hap] = hap
        for j in range(i+1, i+ln):
            hap += elements[j%ln]
            dic[hap] = hap            
    return len([ i for i in list(dic.values()) if i != 0])

 

# 연결 리스트로 푼게 아닌 기존 배열을 두배로 늘려서 하다보니 엄청 시간이 길어짐
# 풀어지긴 함 

def solution(elements):
    dic, ln = {i:0 for i in range(sum(elements)+1)}, len(elements)
    elements_double = elements*2
    for i in range(1, ln+1):
        for j in range(ln): 
            if not dic[sum(elements_double[j:j+i])]: dic[sum(elements_double[j:j+i])] = sum(elements_double[j:j+i])
    return len([ i for i in list(dic.values()) if i != 0])