https://www.acmicpc.net/problem/18111
18111번: 마인크래프트
팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게
www.acmicpc.net
---------------------------------------------------핵심 알고리즘--------------------------------------------
brute-force
---------------------------------------------------풀이----------------------------------------------------
맵의 각 위치에서 블록의 개수의 최소와 최대를 구하고,
최소부터 최대까지 맵을 고르게 만드는 작업을 수행한다.
inventory는 B로 시작해서 블록을 제거한 만큼 +되고, 블록을 놓은 만큼 -된다.
최종적으로 inventory가 0이상일 경우, 땅 고르기 작업이 수행될 수 있음을 의미하고,
그 경우 중에서 시간이 최소인 경우, 시간이 같다면 높이가 최대인 경우를 구한다.
#define FASTIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <stack>
using namespace std;
// (i,j)의 블록 하나 제거 -> 2초
// (i,j)에 블록 하나 놓기 -> 1초
// 땅 고르기 작업에 걸리는 최소 시간과 그 경우 땅의 높이=?
// 인벤토리에는 B개의 블록이 들어있음. 땅의 높이는 256 초과할 수 없음.
int main(void){
FASTIO;
int N, M, B;
cin >> N >> M >> B;
int map[501][501] = {0, };
int min = 512, max = -1;
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
cin >> map[i][j];
if(map[i][j] < min){
min = map[i][j];
}
if(map[i][j] > max){
max = map[i][j];
}
}
}
int ans_time = 99999999;
int ans_height = 0;
// min부터 max까지 땅의 높이를 만들면서 최소 시간일 경우 구하기
for(int i = min; i <= max; i++){
int cur_time = 0;
int inventory = B;
for(int j = 0; j < N; j++){
for(int k = 0; k < M; k++){
if(map[j][k] > i){
cur_time += (map[j][k]-i)*2;
inventory += map[j][k] - i;
}
else{
cur_time += i-map[j][k];
inventory -= i - map[j][k];
}
}
}
if(inventory >= 0 && cur_time <= ans_time){
ans_time = cur_time;
ans_height = i;
}
}
cout << ans_time << " " << ans_height << "\n";
return 0;
}
---------------------------------------------------후기----------------------------------------------------
ans_time을 9999999로 설정해서 틀렸었다.
앞으로는 귀찮아도 그냥 limits.h의 INT_MAX로 적어주자!
'알고리즘' 카테고리의 다른 글
[BOJ] 1107 리모컨 (0) | 2023.05.29 |
---|---|
[BOJ] 1074 Z (0) | 2023.05.28 |
[BOJ] 7568 덩치 (2) | 2023.05.26 |
[BOJ] 4949 균형잡힌 세상 (0) | 2023.05.26 |
[BOJ] 2108 통계학 (0) | 2023.05.25 |