๐ŸŽฒ ๋ฐฑ์ค€ 1915๋ฒˆ ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•

Jeongeunยท2023๋…„ 7์›” 26์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
101/186

๋ฐฑ์ค€ 1915๋ฒˆ

๐Ÿงธ ํ‘ธ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ ธ์ง€๋งŒ ์•„์ด๋””์–ด๋ฅผ ์Šค์Šค๋กœ ์ƒ๊ฐํ•ด๋‚ด์„œ ๋ฟŒ๋“ฏํ•˜๋‹ค. left,right,diagonal์— dp๊ฐ€ ์•„๋‹Œ arr๊ฐ’์„ ๋„ฃ์–ด ํ—ค๋งธ๋Š”๋ฐ ๋ฐ˜๋ก€๋ฅผ ์ฐพ์œผ๋ฉด์„œ ์ž˜๋ชป๋œ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค.
๐Ÿ’ก flat() ์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ์•˜๋‹ค. ์ด์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•  ๋•Œ ์œ ์šฉํ• ๊ฒŒ ์“ธ ๊ฒƒ ๊ฐ™๋‹ค.
๐Ÿ’Š ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ "left === up && up === diagonal" ์กฐ๊ฑด ์—†์ด "dp[n][m] = (Math.sqrt(Math.min(left, up, diagonal))+1) ** 2" ๋งŒ ์“ฐ๋ฉด ๋˜๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  dp์— ๋„“์ด๋ฅผ ์ง์ ‘ ๋„ฃ์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰์— ์ œ๊ณฑํ•ด์ฃผ๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const [N, M] = input.shift().split(" ").map(Number);
const arr = input.map((item) => item.split("").map(Number));
const dp = Array.from(new Array(N), () => new Array(M));

for (let n = 0; n < N; n++) {
  for (let m = 0; m < M; m++) {
    if (arr[n][m] === 1) {
      let left = 0;
      let up = 0;
      let diagonal = 0;
      //๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด
      if (m - 1 >= 0 && n - 1 >= 0) {
        left = dp[n][m - 1];
        up = dp[n - 1][m];
        diagonal = dp[n - 1][m - 1];
      }

      if (left === up && up === diagonal) {
        dp[n][m] = (Math.sqrt(left) + 1) ** 2;
      } else {
        dp[n][m] = (Math.sqrt(Math.min(left, up, diagonal))+1) ** 2;
      }
    } else {
      dp[n][m] = 0;
    }
  }
}

console.log(Math.max(...dp.flat()));

0๊ฐœ์˜ ๋Œ“๊ธ€