const 텃밭 = [
  [0, 0, 0, 0, 0],
  [0, 1, 0, 0, 0],
  [0, 1, 0, 0, 0],
  [0, 0, 1, 0, 0],
  [0, 0, 0, 1, 0]];

function solution(텃밭){
  const 넓이 = 텃밭[0].length;
  const 높이 = 텃밭.length;

  let 텃밭합 = [];
  for (let i=0; i<텃밭.length; i++){
    텃밭합.push(Array(텃밭.length).fill(0));
  }

  for(let i=0; i<높이; i++){
    for(let j=0; j<넓이; j++){
      if (텃밭[i][j] == 0){
        텃밭합[i][j] = 1;
      } else {
        텃밭합[i][j] = 0;
      }
    }
  }

  for(let i=1; i<높이; i++){
    for(let j=1; j<넓이; j++){
      if (텃밭합[i][j] == 1){
        let min;
        if(텃밭합[i-1][j] > 텃밭합[i][j-1]){
          min = 텃밭합[i][j-1];
        } else if (텃밭합[i-1][j-1] > 텃밭합[i-1][j]) {
          min = 텃밭합[i-1][j];
        } else {
          min = 텃밭합[i-1][j-1]
        }
        텃밭합[i][j] = min + 1;
      }
    }
  }

  let maxValue = 0;
  let x = 0;
  let y = 0;

  for (let i=0; i<높이; i++){
    for (let j=0; j<넓이; j++){
      if (maxValue < 텃밭합[i][j]){
        maxValue = 텃밭합[i][j]
        x = i
        y = j
      }
    }
  }

  // console.log(maxValue, x, y);
  console.log(maxValue, 'X', maxValue);

  for(let i=x - (maxValue - 1); i<x+1; i++){
    for(let j=y - (maxValue - 1); j<y + 1; j++){
      텃밭[i][j] = '#';
    }
  }

  return 텃밭;
}

console.log(solution(텃밭));
//문제 해설 강의 코드

let 텃밭 = `0 0 0 0 0
0 1 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0`.replace(/1/g, '!').replace(/0/g, '1').replace(/!/g, '0');

let 역전텃밭 = [];
for(let row of 텃밭.split('\\n')){
  역전텃밭.push(row.split(' '));
}

function solution(역전텃밭){
  const 높이 = 역전텃밭.length;
  const 넓이 = 역전텃밭[0].length;

  for(let i = 0; i < 높이; i++){
    for(let j = 0; j < 넓이; j++) {
      역전텃밭[i][j] = parseInt(역전텃밭[i][j], 10);
    }
  }

  let max = 0;
  let posX = 0;
  let posY = 0;

  for(let i = 1; i < 높이; i++){
    for(let j = 1; j < 넓이; j++){
      if(역전텃밭[i][j] == 1){
        let min;
        // 좌측 원소의 값이 가장 작을 경우
        if(역전텃밭[i-1][j] >= 역전텃밭[i][j-1]){
          min = 역전텃밭[i][j-1];

        // 윗측 원소의 값이 가장 작을 경우
        } else if(역전텃밭[i-1][j] <= 역전텃밭[i][j-1]){
          min = 역전텃밭[i-1][j];
        }
        // 대각선 원소의 값이 가장 작은 경우
        if(min > 역전텃밭[i-1][j-1]){
          min = 역전텃밭[i-1][j-1];
        }
        // 현재 기준점이 그릴 수 있는 가장 큰 정사각형의 한 변의 길이
        역전텃밭[i][j] = min + 1;
				
				// 텃밭배열에서 가장 큰 숫자 찾기
        if(max < 역전텃밭[i][j]){
          max = 역전텃밭[i][j];
          posX = j;
          posY = i;
        }
      }
    }
  }
	
	// 밭을 #으로 표기
  for(let i = posY - (max - 1); i < posY + 1; i++){
    for(let j = posX - (max - 1); j < posX + 1; j++) {
      역전텃밭[i][j] = '#';
    }
  }

	// 숫자를 다시 0과 1로 표기
  for (let i = 0; i < 높이; i++) {
    for (let j = 0; j < 넓이; j++) {
      if (역전텃밭[i][j] >= 1) {
        역전텃밭[i][j] = 0;
      } else if (역전텃밭[i][j] == 0) {
        역전텃밭[i][j] = 1;
      }
    }
  }

  // 밭 출력
	for(let i of 역전텃밭){
    console.log(i);
  }

	// 크기 출력
  console.log(max + ' X ' + max);
}

solution(역전텃밭);