브루트포스 알고리즘으로 모든 경우의 수를 조사하는 전수조사를 실행한다.
땅의 높이 0~256부터 땅을 고르게 만들기 위한 최소의 시간과 높이를 본다.
3중 for문을 통해 구현한다.
//백준 18111, 마인크래프트
#include <iostream>
#include <climits>
int N, M, B;
int grid[501][501];
int max{0};
int main (){
std::cin >> N >> M >> B;
for(int i{0}; i<N; ++i){
for(int j{0}; j<M; ++j){
std::cin >> grid[i][j];
}
}
int min{INT_MAX};
int height{0};
for(int k{0}; k<=256; ++k){
int getB{B}; int useB{0};
for(int i{0}; i<N; ++i){
for(int j{0}; j<M; ++j){
if(grid[i][j] > k) getB = getB + (grid[i][j] - k);
else if(grid[i][j] < k) useB = useB + (k - grid[i][j]);
}
}
int time{0};
if(useB > getB) continue;
else{
time += (getB-B) * 2;
time += useB;
if(time <= min){
min = time;
height = k;
}
}
}
std::cout << min << ' ' << height;
return 0;
}
전수조사의 의미를 다시 한번 깨닫게 됐다. 전수조사 말고 너무 그리디적으로 생각했다.