공부공간

BOJ - 18111 ) 마인크래프트 본문

알고리즘/구현,시뮬

BOJ - 18111 ) 마인크래프트

개발자가될수있을까? 2020. 7. 22. 12:45


https://www.acmicpc.net/problem/18111

 

18111번: 마인크래프트

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

www.acmicpc.net


블록을 평평하게 할때에, 내가가진 가방에서 블록을 꺼내와서 채울것인지? 현재 블록을 깎고, 내가방에

 

한개의 블록을 넣을것인지? 를 판단하여 전체 평평화작업에 드는 최소시간을 구하는 문제이다..

 

먼저 평평화작업에 대상이되는 높이는 입력으로 주어진 값의 최솟값-최댓값 사이가 될수 밖에 없다.

 

따라서 최소-최대값 사이의 모든 값을 반복문을 돌면서, 해당 값보다 크면 깎고, 작으면 더해주는 식으로 구현한다.

 

 



import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.StringTokenizer;
import java.io.BufferedReader;

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		HashSet<Integer> hs = new HashSet<>();
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		int answerTime = 2147000000;
		int answerheight = -1;
		int map[][] = new int[n][m];
		int max=-1, min=answerTime ;
		HashMap<Integer, Integer> hm = new HashMap<>();
		ArrayList<Integer> al = new ArrayList<>();
		for(int i = 0 ; i < n ; i ++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 0 ; j < m ; j++) {
				int now = Integer.parseInt(st.nextToken());
				map[i][j] = now;
				if(now > max) max = now;
				if(now < min) min = now;
			}
		}
		
		for(int i = max ; i >= min ; i--) {
			int time = 0;
			int bag = b; 
			int target = i;
			boolean isCompute = true;
			
			for(int y = 0 ; y < n ; y ++) {
				for(int  x= 0 ; x < m ; x++) {
					if(map[y][x] == target) continue;
					else {
						int diff = Math.abs(target - map[y][x]);
						if(target > map[y][x]) {
							bag -= diff;
							time +=diff;
						} else {
							bag += diff;
							time += (2*diff);
						}
						
					}
				}
			}
			if(bag< 0) {
				continue;
			}
			if(isCompute &&time < answerTime) {
				answerTime = time;
				answerheight = target;
			}
		}
		System.out.println(answerTime + " " + answerheight );
	}
}

'알고리즘 > 구현,시뮬' 카테고리의 다른 글

BOJ - 17081 ) RPG Extreme  (0) 2020.08.02
BOJ - 1846 ) 장기  (1) 2020.07.29
BOJ - 2887 ) 행성 터널  (0) 2020.07.07
BOJ - 6497 ) 전력난  (0) 2020.07.07
BOJ - 1647 ) 도시분할계획  (0) 2020.07.07
Comments