-
๋ฌธ์ 96. ๋์ ํ ๋ฐญ ๋ง๋ค๊ธฐ๐ง codingtest/javascript 100์ 2022. 4. 29. 11:32728x90
์๋ฆผ์ด๋ ๊ท๋์ ํด์ ๋ฐญ๋์ฌ๋ฅผ ์์ํ๊ธฐ๋ก ๋ง์์ ๋จน์๋ค. ํ ๋ฐญ์ ํฐ ๋ฐ์๋ค์ ์ ๊ฑฐํ์ง ๋ชปํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ท์น๋ค์ ์ ํ์๋ค.
- ๋ฐ์๋ฅผ(๋ฐ์๋ '1'๋ก ํ๊ธฐ) ํผํดํ ๋ฐญ์ ๋ง๋ค๋ ์ ์ฌ๊ฐํ ๋ชจ์์ผ๋ก ํ ๋ฐญ์ ๋ง๋ฌ
- ํ ๋ฐญ์ ๊ฐ์ฅ ๋์ ํ ๋ฐญ 1๊ฐ๋ง ๋ง๋ฆ, ๊ทธ ํฌ๊ธฐ๋ฅผ ๋ฐํ.
- ๋ง๋ ํ ๋ฐญ์ ๋ชจ๋ '#' ์ผ๋ก ์ฒ๋ฆฌ
๊ฐ์ฅ ๋๊ฒ ๋ง๋ค์ ์๋ ํ ๋ฐญ์ ๊ธธ์ด์ ํ ๋ฐญ์ ์ถ๋ ฅํ์์ค
// ์ ๋ ฅ 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 // ์ถ๋ ฅ 3 x 3 0 0 # # # 0 1 # # # 0 1 # # # 0 0 1 0 0 0 0 0 1 0 // ์ ๋ ฅ 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 // ์ถ๋ ฅ 2 x 2 # # 0 1 0 # # 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 /* **********๋ฌธ์ ********** */ const ํ ๋ฐญ = []; //์ ๋ ฅ๋ฐ์ ํ ๋ฐญ ๋ฆฌ์คํธ let ๊ฐ๊พผํ ๋ฐญ = []; //ํ ๋ฐญ์ ๊ฐ๊พผ ํ ์ ์ฅ๋ ๋ฆฌ์คํธ // ์ฝ๋์์ฑ console.log(๊ฐ๊พผํ ๋ฐญ)
๋ฏธ๋ฆฌ ์๊ฐํด ๋ด์ผํ ๊ฒ
์ฌ๊ทํจ์์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(Memoization)์ ๋จผ์ ์๊ณ ๋ฌธ์ ์ ์ ์ฉํด๋ณด์
- ๋ค์๊ณผ ๊ฐ์ ์ฌ๊ทํจ์๊ฐ ์๋ค
function fn(n) { if (n === 1 || n === 2) { return 1; } else { return fn(n - 1) + fn(n - 2); // fn(6) // fn(5) + fn(4) // fn(4) + fn(3) + fn(3) + fn(2) // fn(3) + fn(2) + fn(2) + fn(1) + fn(2) + fn(1) + fn(2) // fn(2) + fn(1) + fn(2) + fn(2) + fn(1) + fn(2) + fn(1) + fn(2) } } console.log(fn(6));
๊ฐ์ ํจ์๊ฐ ๋ฐ๋ณตํด์ ์คํ์ด ๋๊ณ ์์ -> ๋นํจ์จ์ -> ๊ทธ๋ ๋ค๋ฉด memoization ์ ํ์ฉํ์ !
- memoization ๊ธฐ๋ฒ
: ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต ์ํ์ ์ ๊ฑฐํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์ .
let n = 6; let memory = Array(n + 1).fill(0); //[ 0, 0, 0, 0, 0, 0, 0 ] function fn(n) { if (n === 1 || n === 2) { memory[n] = 1; return 1; } else if (memory[n] !== 0) { // ๊ฐ์ด ๋ค์ด๊ฐ ์์ ๋ return memory[n]; } else { memory[n] = fn(n - 1) + fn(n - 2); console.log(memory[n]); return memory[n]; } } // ๋ณํ๋๋ ์์ // [0, 0, 0, 0, 0, 0, fn(5) + fn(4)] // [0, 0, 0, 0, 0, fn(4) + fn(3), fn(5) + fn(4)] // [0, 0, 0, 0, fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)] // [0, 0, 0, 0, fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)] // [0, 0, 0, fn(2) + fn(1), fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)] // [0, 0, 1, fn(2) + fn(1), fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)] // [0, 1, 1, fn(2) + fn(1), fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)] // [0, 1, 1, 2, fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)] // [0, 1, 1, 2, 3, 5, 8] // 2 // 3 // 5 // 8 console.log(fn(n)); // 8
๋ต
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") .split("\n"); console.log(ํ ๋ฐญ); let ์ญ์ ํ ๋ฐญ = []; for (let row of ํ ๋ฐญ) { ์ญ์ ํ ๋ฐญ.push(row.split(" ")); } function sol(์ญ์ ํ ๋ฐญ) { const ๋์ด = ์ญ์ ํ ๋ฐญ.length; const ๋์ด = ์ญ์ ํ ๋ฐญ[0].length; let max = 0; let posx = 0; let posy = 0; for (let i = 0; i < ๋์ด; i++) { for (let j = 0; j < ๋์ด; j++) { ์ญ์ ํ ๋ฐญ[i][j] = parseInt(์ญ์ ํ ๋ฐญ[i][j], 10); } } 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}`); } sol(์ญ์ ํ ๋ฐญ);
'๐ง codingtest > javascript 100์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฌธ์ 99. ๊ฐ๊ตฌ๋ฆฌ๋ค์ ํ์ง (0) 2022.05.03 ๋ฌธ์ 97. ํ๋ฐฐ ๋ฐฐ๋ฌ (0) 2022.05.02 ๋ฌธ์ 95. ๋์ฅ์ฐ๊ธฐ (0) 2022.04.28 ๋ฌธ์ 86. ํ์ ์ด๋ฐฅ (0) 2022.04.27 ๋ฌธ์ 85. ์ซ์๋์ด(์ซ์ ๋์ ์ํค๊ธฐ) (0) 2022.04.26