본문 바로가기
알고리즘/프로그래머스

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

by 푸딩코딩 2023. 6. 23.
728x90
반응형
def solution(sequence, k):
    
    #길이가 짧은 것/ -> 시작인덱스작은것
    #DP를 쓰면 좋을것같은데... 아닌가? 
    
    min_len=len(sequence)+1
    i=0
    jump=0
    while i <len(sequence):
        print(i)
        if sequence[i]>k:
            break
        sum=0
        for j in range(i, len(sequence)):
            sum+=sequence[j]
            if (sum==k):#k값이 충족이 된다면, 
                if (j-i) <min_len:
                    min_len=j-i #길이가 짧으면 갱신
                    answer = [i, j]
                if (j-i)==0: #빠른 탈출
                    return answer
                i=j #점프!
                break
            if(sum>k): #k값 넘어버린다면, for문탈출
                break

        i+=1
        
    return answer

기존에 쓴 코드, 처음에는 더 길게 했다가, 시간초과가 뜨길래 dp문제인가 싶어 jump를 설정해서 의미없이 세는 것을 방지하고자했는데 실패..

결국 풀이를 보았따!!

 

슬라이딩 도어?!

 

 

def solution(sequence, k):
    
    l=0
    r=-1
    sum=0
    answer=[]
    while(True):
        if(sum<k):
            r+=1
            if( r>=len(sequence)):
                break
            sum+=sequence[r]
        else:# sum>=k라면 이동이동
            sum-=sequence[l]
            if( l>=len(sequence)):
                break
            l+=1
        if(sum==k): ##sum==k
            answer.append([l,r])
    answer.sort(key=lambda x: (x[1]-x[0], x[0]))
    return answer[0]

sum>=k의 경우, 일단 가장 왼쪽의 숫자를 빼고 처리하기 

728x90
반응형