Tiny Bunny
본문 바로가기
Algorithm/Python

[SWEA #11013] 배열1 - 3분할

by nowag 2024. 2. 29.

문제

입력으로 N개의 양수들이 주어진다. 3개의 연속적인 구간으로 나누고, 각 구간에 속한 값들의 총합을 구한다.
세 구간의 합 중에서 최대값과 최소값의 차이가 최소가 되는 경우를 찾아서 차이를 출력한다.
(2, 6, 8, 5, -8) 과 같이 5개의 정수가 주어지면 (2)(6)(8 5 -8) 으로 3분할 하면 합이 2, 6, 5 가 되고 최대/최소의 차이는 4(= 6 - 2)가 된다.

입력
첫 줄에 테스트케이스 수가 주어진다.
다음으로 정수의 개수 N이 주어진다. (5 <= N <= 50)
다음 줄에 공백으로 구분된 N개의 정수 값이 주어진다. ( -10 <= 정수값 <= 10)

출력
# 과 케이스 번호를 출력하고 3분할 시 최소와 최대의 차이가 최소인 값을 출력한다.

 

내가 쓴 코드

T = int(input())
for t in range(T):
    N = int(input())
    numbers = list(map(int, input().split()))

    MIN = 999999999
    for i in range(1, N):
        diff = 999999999
        for j in range(1, N):
            sum_lst = []
            if i < j:
                sum_lst.append(sum(numbers[:i]))
                sum_lst.append(sum(numbers[i:j]))
                sum_lst.append(sum(numbers[j:]))

                diff = max(sum_lst) - min(sum_lst)
            if diff < MIN:
                MIN = diff

    print(f'#{t+1} {MIN}')

강사님이 어제 설명해주신 문제!! 슬라이싱을 막 해버렷 ~!

풀다가 머 최소 최대의 차이가 최소? 이게 막 헷갈려서 어느 for 문에서 최솟값을 구해야하나 이런거에서 좀 헤맸당..ㅎ

 

출력 결과

#1 4

#2 2

#3 1

728x90
반응형