PS/Baekjoon Online Judge

[백준 18111] 마인크래프트 [C]

kimyoungrok 2021. 7. 31. 20:06

백준 - 18111


풀이

256 ~ 0까지 모든 높이의 평지를 만들어보며 최단 시간을 구하는 문제이다.

동일한 층의 개수를 배열로 입력받았고, 가장 높은 층을 구했다.

최단시간이 동일하다면, 높이가 가장 높은 것을 출력해야 하기 때문에 256부터 0으로 내려가면서 탐색했다.

(만약 시간이 동일하다면 높은 층의 기록이 유지되므로)

최대 시간(result)은 다음과 같다.

땅의 크기(500 x 500) x  설치(2) x 최대높이(256) = 128,000,000

소스코드

#include <stdio.h>
int main(){
    int N, M, B, arr[257] = {0, }, temp, max = 0;
    scanf("%d %d %d", &N, &M, &B);
    for (int i = 0; i < N*M; i++){
        scanf("%d", &temp);
        arr[temp]++;
        max < temp && (max = temp);
    }
    int result = 128000000, height;
    for (int flatLand = max; flatLand >= 0; flatLand--){
        int set = 0, remove = 0;
        for (int i = 0; i < 257; i++)
            if (arr[i])
                if (i < flatLand)
                    set += arr[i]*(flatLand-i);
                else if (i > flatLand)
                    remove += arr[i]*(i-flatLand);
                
        int time = set + remove*2;
        int inventory = B + remove - set;
        if (time < result && inventory >= 0){
            height = flatLand;
            result = time;	
        }
    }
    printf("%d %d\n", result, height);
}

출처

 

18111번: 마인크래프트

팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게

www.acmicpc.net

 

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 2748] 피보나치 수 2 [C]  (0) 2021.07.31
[백준 2747] 피보나치 수 [C]  (0) 2021.07.31
[백준 10773] 제로 [C]  (0) 2021.07.31
[백준 10992] 별 찍기 - 17 [C]  (0) 2021.07.31
[백준 10991] 별 찍기 - 16 [C]  (0) 2021.07.31