From 610838a3ca330be2cdcd318b841948b91f79829a Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:59:43 +0900 Subject: [PATCH] [Gold IV] Title: A[j]-A[i]+A[l]-A[k], Time: 1192 ms, Memory: 39140 KB -BaekjoonHub --- .../A[j]-A[i]+A[l]-A[k].py | 50 +++++++++++++++++++ .../README.md | 30 +++++++++++ 2 files changed, 80 insertions(+) create mode 100644 백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/A[j]-A[i]+A[l]-A[k].py create mode 100644 백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/README.md diff --git a/백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/A[j]-A[i]+A[l]-A[k].py b/백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/A[j]-A[i]+A[l]-A[k].py new file mode 100644 index 0000000..c129374 --- /dev/null +++ b/백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/A[j]-A[i]+A[l]-A[k].py @@ -0,0 +1,50 @@ +import sys + +data = sys.stdin.buffer.read() +p = 0 +L = len(data) + +def readint(): + global p + while p < L and data[p] <= 32: + p += 1 + num = 0 + while p < L and data[p] > 32: + num = num * 10 + (data[p] - 48) + p += 1 + return num + +N = readint() + +a0 = readint() +a1 = readint() + +NEG = -10**30 + +minA = a0 +best1 = a1 - minA +minA = a1 if a1 < minA else minA + +best2 = NEG +ans = NEG + +for t in range(2, N): + x = readint() + + if t >= 3: + v = best2 + x + if v > ans: + ans = v + + v2 = best1 - x + if v2 > best2: + best2 = v2 + + v1 = x - minA + if v1 > best1: + best1 = v1 + + if x < minA: + minA = x + +sys.stdout.write(str(ans) + "\n") diff --git a/백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/README.md b/백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/README.md new file mode 100644 index 0000000..611bc05 --- /dev/null +++ b/백준/Gold/15487. A[j]-A[i]+A[l]-A[k]/README.md @@ -0,0 +1,30 @@ +# [Gold IV] A[j]-A[i]+A[l]-A[k] - 15487 + +[문제 링크](https://www.acmicpc.net/problem/15487) + +### 성능 요약 + +메모리: 39140 KB, 시간: 1192 ms + +### 분류 + +다이나믹 프로그래밍 + +### 제출 일자 + +2026년 2월 10일 18:58:20 + +### 문제 설명 + +

크기가 N인 배열 A가 주어졌을 때, i < j < k < l을 만족하는 (i, j, k, l) 중에서 A[j]-A[i]+A[l]-A[k]의 최댓값을 구하는 프로그램을 작성하시오.

+ +### 입력 + +

첫째 줄에 배열 A의 크기 N(4 ≤ N ≤ 1,000,000)이 주어진다.

+ +

둘째 줄에는 배열 A에 들어있는 수가 순서대로 주어진다. 배열에 들어있는 수는 1,000,000보다 작거나 같은 자연수이다.

+ +### 출력 + +

첫째 줄에 i < j < k < l을 만족하는 (i, j, k, l) 중에서 A[j]-A[i]+A[l]-A[k]의 최댓값을 출력한다.

+