마인크래프트 - 18111
2025. 2. 12. 15:02ㆍPS/백준
문제
https://www.acmicpc.net/problem/18111
느낀점
처음에는 최적의 높이가 무엇일까에 대해 고민했다. 하지만 그렇게하다보면 로직에서 오류가 발생할 수 있다는 것을 인지하였다. 문제의 조건을 보았을 때, 모든 경우를 다 돌아서 1초 내에 들어올 수 있다고 생각했고, 모든 경우의 수를 다 구하는 방식으로 문제를 해결하였다.
풀이
#include <iostream>
#include <vector>
#include <algorithm>
#define pii pair<int, int>
using namespace std;
int main()
{
int N, M, B;
cin >> N >> M >> B;
vector<vector<int>> landMap(N, vector<int>(M));
int maxValue = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
int temp;
cin >> temp;
landMap[i][j] = temp;
maxValue = max(maxValue, temp);
}
}
vector<pii> buildV;
for (int i = 0; i <= maxValue; i++)
{
int fcommand = 0;
int scommand = 0;
int iB = B;
for (int j = 0; j < N; j++)
{
for (int k = 0; k < M; k++)
{
if (i > landMap[j][k])
{
scommand += (i - landMap[j][k]);
iB -= (i - landMap[j][k]);
}
else if (i < landMap[j][k])
{
fcommand += (landMap[j][k] - i);
iB += (landMap[j][k] - i);
}
}
}
if (iB < 0)
{
continue;
}
pii temp = make_pair(fcommand * 2 + scommand, i);
buildV.push_back(temp);
}
sort(buildV.begin(), buildV.end(), [](const pii &p1, const pii &p2)
{
if (p1.first == p2.first)
{
return p1.second > p2.second;
}
return p1.first < p2.first; });
pii answer = buildV[0];
cout << answer.first << " " << answer.second;
return 0;
}
'PS > 백준' 카테고리의 다른 글
앵무새 - 14713 (0) | 2025.02.12 |
---|---|
222-풀링 - 17829 (0) | 2025.02.12 |
도키도키 간식드리미 - 12789 (0) | 2025.01.12 |
[백준] 14567 - 선수과목 (0) | 2024.08.16 |
[백준] 5430 - AC (0) | 2024.08.11 |