board[i,j]
와 현재 높이
와의 차이namespace BOJ_18111
{
class Program
{
static void Main()
{
using StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
using StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int[] inputs = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
int n = inputs[0];
int m = inputs[1];
int b = inputs[2];
int[,] board = new int[n, m];
int minHeight = int.MaxValue;
int maxHeight = int.MinValue;
for (int i = 0; i < n; i++)
{
inputs = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
for (int j = 0; j < m; j++)
{
board[i, j] = inputs[j];
minHeight = Math.Min(board[i, j], minHeight);
maxHeight = Math.Max(board[i, j], maxHeight);
}
}
int answerTime = int.MaxValue;
int answerHeight = 0;
for (int height = minHeight; height <= maxHeight; height++)
{
int inventory = b;
int time = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (board[i, j] == height) continue;
int gap = board[i, j] - height;
if (gap > 0)
{
inventory += gap;
time += gap * 2;
}
else
{
inventory += gap;
time -= gap;
}
}
}
if (inventory < 0) continue;
if (time < answerTime)
{
answerTime = time;
answerHeight = height;
}
else if (time == answerTime)
{
answerHeight = Math.Max(answerHeight, height);
}
}
sw.Write($"{answerTime} {answerHeight}");
}
}
}
board[i,j]
와 현재 높이
를 비교할 때 tempBoard
를 선언하여 비교하였으며 새로운 높이로 비교를 시작하기 전에 tempBoard
를 초기화시켜주고 비교하였다.
당연하게도 이 로직은 굉장히 비효율적이며 시간초과
가 났다.
구현
브루트포스 알고리즘