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;
}

 

 

 

반응형