그럴듯한 개발 블로그
반응형

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

 

18111번: 마인크래프트

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

www.acmicpc.net

이거 생각보다 재미있는 문제였다.  처음엔 걍 평균높이였을때가 제일 빠르겠지~싶었는데 극단적인 예외사항들이 떠올랐다. 그래서 board에서 가장 높은 height 부터 averageHeight까지 줄여가며 모든 경우를 탐색했다. averageHeight 아래로는 더 짧게 걸릴 수가 없다 블록을 파는데 더 오랜 시간이 걸리기 때문이다. 

#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <stack>
#include <unordered_set>
#include <utility>
#include <cmath>
using namespace std;
vector<vector<int> > board;
int col, row, block, sum = 0, maxHeight = 0;

int getTimeOfWork(int height) {
	if (height > 256)
		return INT32_MAX;
	int remainBlock = sum + block - (height * col * row);
	if (remainBlock < 0) // block 모자랄때
		return INT32_MAX;
	int time = 0;
	for (int i = 0; i < col; i++) {
		for (int j = 0; j < row; j++) {
			int distance = height - board[i][j];
			if (distance < 0) // 땅파야함
				time += distance * -2;
			else // 블록 추가해야함
				time += distance;
		}
	}
	return time;
}

int main() {
	ios::sync_with_stdio(0); cin.tie(0);
	// 블록 제거 2초
	// 블록 추가 1초
	cin >> col >> row >> block;
	for (int i = 0; i < col; i++) {
		vector<int> v;
		for (int j = 0; j < row; j++) {
			int input;
			cin >> input;
			sum += input;
			maxHeight = max(maxHeight, input);
			v.push_back(input);
		}
		board.push_back(v);
	}
	int averageHeight = static_cast<int>(round(static_cast<double>(sum) / (col * row)));
	int curTime = getTimeOfWork(maxHeight);
	int minTime = curTime;
	int curHeight = maxHeight;
	int minHeight = curHeight;

	while (curHeight >= averageHeight) {
		curTime = getTimeOfWork(--curHeight);
		if (minTime > curTime) {
			minTime = curTime;
			minHeight = curHeight;
		}
	}
	cout << minTime << ' ' << minHeight;
}
반응형

'<algorithm> > 백준' 카테고리의 다른 글

백준 15683 감시 c++  (0) 2023.09.18
백준 1107 리모컨 c++  (0) 2023.09.17
백준 18110 solved.ac c++  (0) 2023.09.17
백준 1987 알파벳 c++  (0) 2023.09.16
백준 1931 회의실 배정 c++  (0) 2023.09.15
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!