백준 18111번: 마인크래프트
문제
문제 바로가기> 백준 18111번: 마인크래프트
풀이
문제를 제대로 이해하지 못해 꽤 틀린 후 맞출 수 있었다. 그냥 모든 경우의 수를 돌면서 최소 시간 조건을 만족한다는 전제하에 땅의 높이가 가장 높아지도록 정답을 설정해주었다. 땅의 높이가 0~256까지 가능하므로 0~256까지 반복문을 돌면서 다음 두 가지 조건(tmp<=time && btmp<=b
)을 만족하는 경우 정답을 update해주었다. tmp<=time
에서 작은 경우가 아니라 같거나 작은 경우로 하여 최소 시간 조건 일 때 땅의 최대 높이를 보장할 수 있다.
# include <iostream>
# include <cstdlib>
using namespace std;
int main(){
int n, m, b; cin>>n>>m>>b;
int h[n][m] = {};
int num[257] = {};
for(int i=0; i<n; i++){
for(int j=0; j<m; j++) {
cin>>h[i][j];
num[h[i][j]]++;
}
}
int time=2100000000, height=0;
for(int i=0; i<257; i++){
int tmp=0, btmp=0;
for(int j=0; j<n; j++){
for(int k=0; k<m; k++){
if(i<h[j][k]) {
tmp+=(h[j][k]-i)*2;
btmp-=(h[j][k]-i);
}
else if(i>h[j][k]){
tmp+=(i-h[j][k]);
btmp+=(i-h[j][k]);
}
}
}
if(tmp<=time && btmp<=b){
time = tmp;
height = i;
}
}
cout << time << ' ' << height;
}
Author And Source
이 문제에 관하여(백준 18111번: 마인크래프트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@danbibibi/백준-18111번-마인크래프트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)