주소 : https://www.acmicpc.net/problem/18111
18111번: 마인크래프트
팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게
www.acmicpc.net
소스 코드 :
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
int N, M, B;
int arr[500][500];
int least_time = 987654321;
int H;
cin >> N >> M >> B;
for (int i = 0;i < N;i++)
for (int j = 0;j < M;j++)
cin >> arr[i][j];
for (int h = 0;h <= 256;h++)
{
int build = 0;
int remove = 0;
for (int i = 0;i < N;i++)
{
for (int j = 0;j < M;j++)
{
int height = arr[i][j] - h;
if (height > 0) remove += height;
else if (height < 0) build -= height;
}
}
if (remove + B >= build)
{
int time = remove * 2 + build;
if (least_time >= time)
{
least_time = time;
H = h;
}
}
}
cout << least_time << ' ' << H << '\n';
}
마무리 : 문제를 보고 처음에 해결 방법이 떠오르지 않았다. 땅의 높이를 맞추는 것이 문제였는데 브루트포스 알고리즘으로 땅의 높이를 맞추고 제거하고나 쌓아서 최소의 시간을 찾는다.
시간 제한이 1초이기 때문에 브루트포스 알고리즘을 사용하면 시간이 오래 걸릴것 같았지만 입력된 수가 많이 크지 않으니까 가능했던 문제였다.
'백준 > C++' 카테고리의 다른 글
백준 11723번 : 집합 [C++] (0) | 2022.08.26 |
---|---|
백준 1676번 : 팩토리얼 0의 개수 [C++] (0) | 2022.08.25 |
백준 2805번 : 나무 자르기 [C++] (0) | 2022.08.23 |
백준 1874번 : 스택 수열 [C++] (0) | 2022.08.23 |
백준 1654번 : 랜선 자르기 [C++] (0) | 2022.08.22 |