문제 |
18111번: 마인크래프트
팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게
www.acmicpc.net
코드 (브루트포스) |
#include <iostream>
#include <vector>
using namespace std;
int n, m, b;
int mnHeight = 256;
int mxHeight = 0;
vector<vector<int>> map;
void input() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> b;
map.resize(n, vector<int>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> map[i][j];
if (map[i][j] < mnHeight) mnHeight = map[i][j];
if (map[i][j] > mxHeight) mxHeight = map[i][j];
}
}
}
int getTime(int height) {
int time = 0;
int block = b;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] > height) {
int diff = map[i][j] - height;
time += diff * 2;
block += diff;
} else {
int diff = height - map[i][j];
time += diff;
block -= diff;
}
}
}
if (block < 0) return INT32_MAX;
return time;
}
void solve() {
int mnTime = INT32_MAX;
int mnIdx = -1;
for (int i = mxHeight; i >= mnHeight; i--) {
int time = getTime(i);
if (time < mnTime) {
mnTime = time;
mnIdx = i;
}
}
cout << mnTime << ' ' << mnIdx;
}
int main() {
input();
solve();
return 0;
}
설명 |
최대 높이부터 최소 높이까지 높이를 1씩 줄여가며 최소 시간을 구한다.
'PS > BOJ' 카테고리의 다른 글
[C++] BOJ (백준) 1012 : 유기농 배추 (0) | 2023.03.16 |
---|---|
[C++] BOJ (백준) 1003 : 피보나치 함수 (0) | 2023.03.07 |
[C++] BOJ (백준) 15829 : Hashing (0) | 2023.03.05 |
[C++] BOJ (백준) 11866 : 요세푸스 문제 0 (0) | 2023.03.05 |
[C++] BOJ (백준) 11651 : 좌표 정렬하기 2 (0) | 2023.03.05 |