프로그래머스/LV2

[프로그래머스 Lv2, python]- 연속 부분 수열

chyam_eun 2025. 1. 2. 10:02

 

https://school.programmers.co.kr/learn/courses/30/lessons/131701

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(ele):
    li=[]
    idx=2 # 연속 부분 수열 길이
    le=len(ele) # ele의 길이 저장
    for a in ele: # 길이1인 연속 부분 수열
        if a not in li:
            li.append(a)
    while(idx<le): # 연속 부분 수열 길이가 ele의 길이보다 작아야함
        for a in range(0,le): 
            cnt=0 # idx+a가 le보다 커졌을때 어느정도 차이나는지.
            su=0 # 연속 부분 수열의 합
            if(le-a<idx):
                cnt=idx-(le-a) 
            if(cnt!=0): 
                su=sum(ele[:cnt])
                su+=sum(ele[a:])
            else:
                su+=sum(ele[a:a+idx])
            li.append(su)
        idx+=1
    li.append(sum(ele)) # 다 합친것은 while내에서 포함이안되어 따로 해줌
    li=set(li) # 중복 제거
    return len(li)

위의 풀이는 통과되었지만 시간복잡도가 조금 있었다.

아래는 다른분의 풀이인데, 하나를 기준으로 길이를 점차 늘려가며 집합에 추가해주었다. 

def solution(elements):
    ll = len(elements) 
    res = set()

    for i in range(ll):
        ssum = elements[i]
        res.add(ssum)
        for j in range(i+1, i+ll):
            ssum += elements[j%ll]
            res.add(ssum)
    return len(res)