프로그래머스/LV2

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

chyam_eun 2025. 2. 22. 17:09

https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=python3

 

프로그래머스

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

programmers.co.kr

def solution(sequence, k):
    li=[] # 값 저장
    start,end=0,0
    mi= float('inf') # 최대의 값으로 초기화
    su=sequence[0] # 처음 값을 저장해둠
    while(start<len(sequence) and end<len(sequence)):
        if su==k: # 같을때 인덱스 저장
            if mi>end-start:  # 최소값보다 작으면 새로 저장
                mi=end-start
                li=[start,end] # 그 값을 인덱스에 저장
            su-=sequence[start] # start위치를 옮기기전에 빼주기
            start+=1
        elif su<k: # 적을때 end 뒤로 옮김
            end+=1
            if end<len(sequence): # end가 최대가 아니면 더해주기
                su+=sequence[end]
            
        else: # 클때는 start를 뒤로 옮김
            su-=sequence[start] # 값을 빼주고 뒤로 옮기기
            start+=1
    return li

아래의 코드는 for문을 중첩하여 접근하여 시간초과가 떴던 코드이다.

def solution(sequence, k):
    li=[]
    an=[]
    mi=100000
    for i in range(len(sequence)):
        for j in range(i+1,len(sequence)+1):
            su=sum(sequence[i:j]) # i번쨰부터 j번째 인덱스까지의 값을 더한값이
            if su==k: # k와 같으면 그 인덱스들 추가
                li.append([i,j-1])
            elif su>k: # k보다크면 멈추기
                break
    for i in li:
        dif=i[1]-i[0] # 인덱스 차이
        if dif<mi: # 최소보다 작으면 저장
            an=i
            mi=dif
    return an