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

 

이번에 볼 문제는 백준 33085번 문제인 Stock Market이다.
문제는 아래 링크를 확인하자.

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

 

어떤 항에서부터 수열을 보기 시작하더라도 N개 항씩 건너뛰면서 읽으면 공차가 주어지는 Di의 합으로 일정한 등차수열이 됨을 관찰하자.

 

따라서 첫 N개의 항에 대하여 얻을 수 있는 각 등차수열에 대하여 X 이상의 값이 해당 등차수열에 있는지, 있다면 그러한 값의 최솟값을 구해 문제의 답을 구할 수 있다.

 

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

 

#include <iostream>
using namespace std;
typedef long long ll;

ll N, val, X, gap;
ll D[100000];
ll ans = 1000000000000000007LL;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> val >> X;
	for (int i = 0; i < N; i++) cin >> D[i], gap -= D[i];
	for (int i = 0; i < N; i++) {
		if (val >= X) ans = min(ans, val - (val - X) / gap * gap);
		val += D[i];
	}

	if (ans < 1000000000000000007LL) cout << ans;
	else cout << -1;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 33134 // C++] Road Network  (0) 2025.01.09
[BOJ 32925 // C++] Just Half is Enough  (0) 2025.01.08
[BOJ 33118 // C++] ICPC Provincial  (0) 2025.01.06
[BOJ 32980 // C++] 분리배출  (0) 2025.01.03
[BOJ 32978 // C++] 아 맞다 마늘  (0) 2025.01.02

+ Recent posts