득이공간
[백준 C++] 18111 마인크래프트 - 브루트포스 본문
#include <iostream>
#include <climits>
using namespace std;
int Height[501][501];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, M, B;
cin >> N >> M >> B;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
cin >> Height[i][j];
}
}
int MinTime = INT_MAX;
int SolutionHeight = 0;
for (int TargetHeight = 0; TargetHeight < 257; ++TargetHeight)
{
int Time = 0;
int Blocks = B;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
int CurrentHeight = Height[i][j];
if (CurrentHeight > TargetHeight)
{
Blocks += (CurrentHeight - TargetHeight);
Time += (CurrentHeight - TargetHeight) * 2;
}
else if (CurrentHeight < TargetHeight)
{
Blocks -= (TargetHeight - CurrentHeight);
Time += (TargetHeight - CurrentHeight);
}
}
}
if (Blocks < 0)
{
continue;
}
if (Time <= MinTime)
{
MinTime = Time;
SolutionHeight = TargetHeight;
}
}
cout << MinTime << ' ' << SolutionHeight;
}
브루트포스 유형의 문제입니다.
기준 높이를 0부터 256까지 1씩 올려가면서 모든 경우의 경과 시간을 체크해주도록 풀었습니다.
그리고 각 루프에서 작업을 모두 마쳤을 때 인벤토리 블럭의 개수가 음수가 되는 경우는 체크하지 않도록 했습니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 C++] 1927 최소 힙 - 우선순위큐 (0) | 2024.02.15 |
---|---|
[백준 C++] 1759 암호 만들기 - 조합론 (1) | 2024.02.13 |
[백준 C++] 1735 분수 합 - 유클리드호제법 (1) | 2024.02.12 |
[백준 C++] 11689 GCD(n, k) = 1 - 오일러피 (0) | 2024.02.12 |
[백준 C++] 1929 소수 구하기 - 에라토스테네스의체 (0) | 2024.02.12 |