본문 바로가기
Algorithm problem solving/풀이

4835. 구간합

by Jiyoon-park 2020. 3. 9.

예전에 푼 문제를 다시 풀어봤는데, 예전에도 슬라이싱, 이번에도 슬라이싱 사용해서 풀더라ㅋㅋㅋㅋㅋ

내장 함수를 최대한 사용하지 않으려 노력해봣당. 버블 소트도 다시 써봤는데, 그냥 minmax 두고 풀어도 되겠당.

1월 29일의 풀이

T = int(input())

for tc in range(1, T+1):
    N, M = map(int, input().split())
    nums = list(map(int, input().split()))
    nums_sum = []

    # M만큼 구간을 잘라서 합의 리스트(nums_sum)를 구해라.
    for i in range(0, N-M+1):
        nums_sum.append(sum(nums[i:i+M]))

    # 합의 리스트(nums_sum)의 max와 min을 찾아서 max-min을 구해라.
    print('#{} {}'.format(tc, max(nums_sum)-min(nums_sum)))

3월 9일의 풀이

T = int(input())
for tc in range(1, T+1):
    n, m = map(int, input().split())
    nums = list(map(int, input().split()))

    # 구간합들을 담을 변수 result
    result =[]
    for i in range(n-m+1):
        summ = 0
        for j in range(m):
            summ += nums[i+j]
        result.append(summ)

    # 버블 정렬
    for _ in range(len(result)-1):
        for i in range(len(result)-1):
            if result[i] > result[i+1]:
                result[i], result[i+1] = result[i+1], result[i]

    print('#{} {}'.format(tc, result[-1]-result[0]))
  • 입력 조건에 맞춰 min, max = 1000000, 1 로 두고 매번 summ을 비교해가면서 풀어도 된다.