반응형
https://www.acmicpc.net/problem/17088
#문제 간단 정리
수학 + 브루트 포스 문
#문제 해결 방법
등차수열이기 때문에 결국에는 첫항과 마지막항에 +1 0 -1 을 하면
공차가 각각 정해지는데 이렇게 3*3 경우의 수로 공차가 정해지면 각 항에서 start + 공차 * 인덱스
를 한 값이 각 벡터에 올바르게 들어 갈 수 있는지 체크해주면 (+1 -1 을 해서 값을 만들 수 있는지 ) 확인해 주면 된다
#전체 코드
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int n;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
vector<int> vec(n);
for (int& x : vec) cin >> x;
if (n == 1) {
cout << 0;
return 0;
}
int ans = INT_MAX;
for (int d1 = -1; d1 <= 1; d1++) {
for (int d2 = -1; d2 <= 1; d2++) {
int first = vec[0] + d1;
int second = vec[1] + d2;
int gap = second - first;
int count = 0;
if (d1 != 0) count++;
if (d2 != 0) count++;
bool valid = true;
for (int i = 2; i < n; i++) {
int expected = first + gap * i;
int actual = vec[i];
if (abs(expected - actual) > 1) {
valid = false;
break;
}
if (expected != actual) {
count++;
}
}
if (valid) {
ans = min(ans, count);
}
}
}
if (ans == INT_MAX) {
cout << -1;
}
else {
cout << ans;
}
}
반응형
'[백준] > C++' 카테고리의 다른 글
백준 2563번 색종이 [C++] (0) | 2025.01.12 |
---|---|
백준 15925번 욱제는 정치쟁이야!! [C++] (0) | 2025.01.11 |
백준 30023번 전구 상태 바꾸기 [C++] (0) | 2025.01.04 |
백준 14504번 로봇 청소기 [C++] (0) | 2025.01.02 |
백준 18114번 블랙 프라이데이 [C++] (0) | 2025.01.01 |