※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 15487번 문제인 A[j]-A[i]+A[l]-A[k]이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/15487

 

주어진 수식은 인덱스 순서에 맞게 -A[i]+A[j]-A[k]+A[l]로 다시 작성할 수 있다. 이 때, 앞의 1개, 2개, 3개, 4개의 값까지 계산한 값을 저장하는 네 개의 변수 a, b, c, d를 준비하자. 그러면 간단한 점화식을 통해 수열을 읽어나가면서 해당 수까지 읽었을 때의 a, b, c, d의 값을 갱신해나갈 수 있다.

 

문제의 답이 음수가 될 수 있으므로 각 변수의 초기값 설정에 유의하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N;
int A = -1000000007, B = -1000000007, C = -1000000007, D = -1000000007;
int x;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	cin >> x;
	A = -x;
	cin >> x;
	B = A + x;
	A = max(A, -x);
	cin >> x;
	C = B - x;
	B = max(B, A + x);
	A = max(A, -x);
	for (int i = 3; i < N; i++) {
		cin >> x;
		D = max(D, C + x);
		C = max(C, B - x);
		B = max(B, A + x);
		A = max(A, -x);
	}
	cout << D;
}



728x90

'BOJ' 카테고리의 다른 글

[BOJ 16581 // C++] Lie Detector  (2) 2024.09.11
[BOJ 24145 // C++] 折り紙 (Origami)  (2) 2024.09.10
[BOJ 19686 // C++] Lost Array  (0) 2024.09.08
[BOJ 14488 // C++] 준오는 급식충이야!!  (1) 2024.09.07
[BOJ 6199 // C++] Big Square  (2) 2024.09.06

+ Recent posts