프로그래머스/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