- 문제 링크 : boj.kr/5485
- 난이도 : G2
- 태그 : 애드 혹
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<int> arr(n);
for(auto &u : arr) cin >> u;
int m, M;
M = arr[0];
m = arr[0] - (arr[1]-arr[0]);
for(int i = 0; i < n-1; i++) {
int a = arr[i];
int b = arr[i+1];
b = min(b, a + (a-m));
m = max(a, a + (a-M));
M = b;
}
cout << max(0, M-m+1);
return 0;
}
풀이
i번째 원소의 값을 i-1번째 원소의 범위, i번째 평균값, i+1번째 평균값을 통해 범위를 구한다.
i번째 원소의 범위와 i-1번째 원소의 범위는 i번째 평균값을 기준으로 대칭적이게 된다.
단, 수열이 비감소 수열이기 때문에 i번째 원소의 범위는 i+1번째 평균값을 넘을 수 없다.
한 원소가 정해지고 나면 나머지 원소들이 정해지므로, 최종적인 범위에 들어가는 수의 개수가 답이 된다.
728x90
'PS' 카테고리의 다른 글
BOJ 27447 : 주문은 토기입니까? (0) | 2024.06.21 |
---|---|
BOJ 25391 : 특별상 (0) | 2024.06.20 |
BOJ 17205 : 진우의 비밀번호 (0) | 2024.06.18 |
BOJ 1593 : 문자 해독 (0) | 2024.06.17 |
BOJ 2138 : 전구와 스위치 (0) | 2024.06.16 |