마인크래프트 - 18111

2025. 2. 12. 15:02PS/백준

문제

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