백준 18111 마인크래프트 / C++

이유참치·2025년 12월 15일

백준

목록 보기
179/249

문제 : 18111

풀이 point

브루트포스 알고리즘으로 모든 경우의 수를 조사하는 전수조사를 실행한다.
땅의 높이 0~256부터 땅을 고르게 만들기 위한 최소의 시간과 높이를 본다.

풀이 방법

3중 for문을 통해 구현한다.

코드

//백준 18111, 마인크래프트

#include <iostream>
#include <climits>

int N, M, B;
int grid[501][501];
int max{0};

int main (){

    std::cin >> N >> M >> B;
    for(int i{0}; i<N; ++i){
        for(int j{0}; j<M; ++j){
            std::cin >> grid[i][j];
        }
    }

    int min{INT_MAX};
    int height{0};
    for(int k{0}; k<=256; ++k){
        int getB{B}; int useB{0};
        for(int i{0}; i<N; ++i){
            for(int j{0}; j<M; ++j){
                if(grid[i][j] > k) getB = getB + (grid[i][j] - k);
                else if(grid[i][j] < k) useB = useB + (k - grid[i][j]);
            }
        }
        int time{0};
        if(useB > getB) continue;
        else{
            time += (getB-B) * 2;
            time += useB;
            if(time <= min){
                min = time;
                height = k;
            }
        }
        
    }
    std::cout << min << ' ' << height;

    return 0;
}

사족

전수조사의 의미를 다시 한번 깨닫게 됐다. 전수조사 말고 너무 그리디적으로 생각했다.

profile
임아리 - 대학생

0개의 댓글