문제
입력으로 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
반응형
'Algorithm > Python' 카테고리의 다른 글
| [SWEA #20396] 돌 뒤집기 게임 1 (2) | 2024.02.29 |
|---|---|
| [SWEA #11010] 배열2 - 대각 최대값 (1) | 2024.02.29 |
| [SWEA #11315] 오목 판정 (3) | 2024.02.29 |
| [SWEA #4408] 자기 방으로 돌아가기 (0) | 2024.02.29 |
| [SWEA #1860] 진기의 최고급 붕어빵 (3) | 2024.02.29 |