✔️

답안

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(역전텃밭);