PS
백준 16951번 블록 놀이
남마허
2020. 3. 17. 19:38
https://www.acmicpc.net/problem/16951
16951번: 블록 놀이
욱제는 높이가 1인 블록을 매우 많이 가지고 있고, 블록을 쌓아서 탑 N개를 만들었다. 탑은 일렬로 배열했고, 왼쪽에서부터 i번째 탑의 높이는 Ai이다. 욱제가 가장 좋아하는 정수는 K이다. 따라서, 인접한 두 탑의 높이 차이를 K로 만들려고 한다. 즉, Ai+1 - Ai = K를 만족해야 한다. 욱제가 1분 동안 할 수 있는 작업은 탑 하나를 고르고, 탑에 블록을 더 놓아서 높이를 크게 만드는 것 또는 탑에서 블록을 빼서 높이를 작게 만드는 것이다. 인
www.acmicpc.net
<접근방법>
완전 탐색 문제입니다.
n^2 해도 시간 초과가 나지 않기 때문에 완전 탐색을 할 수 있습니다.
어떤 수를 기준으로 k의 값에 맞추어 모든 값을 변경합니다.
이 행위를 모든 수에 대해서 해줍니다.
반복하며 최소값을 찾아줍니다.
<느낀 점>
<코드>
#include<iostream>
#include<algorithm>
using namespace std;
int n, k, res;
int a[1000];
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i++) cin >> a[i];
res = n;
for (int i = 0; i < n; i++) {
int tres = 0;
for (int j = 0; j < n; j++) {
int now = k * (j - i) + a[i];
if (now < 1) {
tres = n;
break;
}
if (now != a[j]) tres++;
}
res = min(res, tres);
}
cout << res << '\n';
return 0;
}
반응형