문제
설명
블럭을 쌓거나 제거해서 평평한 바닥을 만들면 되는 문제이다.
입력되는 땅의 높이가 0~256 사이라서 0과 256 사이의 높이를 모두 체크해도 되지만,
입력된 높이의 최소~최대 사이만 체크해도 가능하다.
답이 여러개라면 가장 땅의 높이가 높은 것을 출력해야 하기에 낮은 높이부터 체크하였다.
각 높이를 돌면서, 평평하게 만드는데 드는 시간과 블럭을 체크하였고, 블럭이 부족하다면 답으로 기록하지 않았다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <climits>
using namespace std;
int N, M, B;
int arr[500][500];
int answer_time = INT_MAX;
int answer_height;
int main() {
cin >> N >> M >> B;
int min = INT_MAX, max = INT_MIN;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> arr[i][j];
if (arr[i][j] > max) max = arr[i][j];
if (arr[i][j] < min) min = arr[i][j];
}
}
for (int height = min; height <= max; height++) {
int time = 0;
int block = B;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (arr[i][j] > height) {
time += abs(arr[i][j] - height) * 2;
block += abs(arr[i][j] - height);
}
else if (arr[i][j] < height) {
time += abs(arr[i][j] - height);
block -= abs(arr[i][j] - height);
}
}
}
if (answer_time >= time && block >= 0) {
answer_time = time;
answer_height = height;
}
}
cout << answer_time << " " << answer_height;
return 0;
}
'Koala - 12기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[프로그래머스/Java] 타겟 넘버 (0) | 2023.09.10 |
---|---|
[백준/C++] 1436 영화감독 숌 (0) | 2023.09.10 |
[백준/python] 6603번: 로또 (0) | 2023.09.10 |
[백준/python3] 14888번 : 연산자 끼워넣기 (0) | 2023.09.09 |
12기 코딩테스트 스터디 출석부 (0) | 2023.09.05 |