[Codility/Lesson5]MinAvgTwoSlice(Python)

zzarbttoo·2021년 8월 5일
0

코딜리티

목록 보기
15/29


연속적인 부분 합이 가장 작을 때 시작 지점
슬라이싱을 사용하면 되고, 연속 2개/3개의 평균 중 작은 값을 찾으면 된다

def solution(A):

    start_num, small_start_num, avg_num= 0 , 0 , 1000000
    length_A = len(A)
    
    if length_A == 2:
        return 0

    while True:
        now_avg = sum(A[start_num: start_num + 2])/2
        if avg_num > now_avg:
            avg_num , small_start_num = now_avg, start_num
        start_num += 1
        if start_num + 2 > length_A:
            break

    start_num = 0

    while True:
        #print(A[start_num: start_num + 3])
        now_avg = sum(A[start_num: start_num + 3])/3
        if avg_num > now_avg:
            avg_num , small_start_num = now_avg, start_num
        start_num += 1
        if start_num + 3 > length_A:
            break

    return small_start_num
  • 첫번째 while문은 두개씩 돌린 것, 두번째 while문은 세개씩 돌린 것
  • 근데 이게 O(n) 나온게 신기하다...

결과는 여기

profile
나는야 누워있는 개발머신

0개의 댓글