μκΈ°μκ° νμ΄μ§λ§λ€κΈ°
Who Page
λ₯Ό μμ±νκ³ , κ° νμ΄μ§λ³ νμν λ΄μ©μ λ³κ²½νλ€. μ΄μ μ νμ΄μ§λ₯Ό λμμΈ ν΄λμμ§λ§, κ·Έ λμμΈμΌλ‘ νμ΄μ§λ₯Ό λ§λλκ²μ 컨ν΄μΈ λ 보μ¬μ§λ λΆλΆμ΄ λΆμ‘±νλ€κ³ μκ°ν΄μ κ³μ μ΄λ»κ² λ μ΄μμμ λ°κΏμ§ κ³ λ―Όμ λ§μ΄ νκ²λμλ€. μ ννκ² κΈ°νμ΄λ λμμΈμ μμ±νμ§ μκ³ μμ
νλ€λ³΄λ μμ νλμΌμ΄ λ무 λ§κ³ μ€νΈλ μ€λ λ§μ΄ λ°μλ€.
(λ€λ₯Έ μ€ν°λ μ‘°μλ€μ μ¬μ¬ μ΄λ ₯μλ₯Ό λ£κ³ λ©΄μ μ λ³΄λ¬ λ€λκΈ°λλ¬Έμ λκ° μλμ μΌλ‘ μ‘°κΈν΄μ§λ κΈ°λΆ? π)
Who page
λ μ²μ λ‘λ©λμμλ, μμ°¨μ μΌλ‘ λνλ λλμ μ λλ©μ΄μ
μ λ£μκ³ , gridλ₯Ό μ΄μ©ν΄μ μ 체μ μΈ λ μ΄μμμ μ€μ ν΄λ³΄μλ€.
μμ§ gridλ μ΅μνμ§ μμμ μ‘°κΈ λ 곡λΆνκ³ μμ£Ό μ¬μ©ν΄μ 빨리 μ΅νμΌκ² λ€. containerκ° λλ λΆλΆμ grid-template-rows,grid-template-colunmsλ₯Ό μ¬μ©ν΄μ μ€μ νλκΉ νΈνλ€. λ°μνμ ꡬνν λλ λμμ΄ λ§μ΄ λμλ€.
λμμΈ ν¨ν΄?
=> λμμΈ ν¨ν΄μ μΌμ’ μ μ€κ³ κΈ°λ²μ΄λ©°, μ€κ³λ°©λ²μ΄λ€ !
1. λμμΈ ν¨ν΄μ λͺ©μ
2. λμμΈ ν¨ν΄μ νΉμ§
3. λμμΈ ν¨ν΄μ μμΉ, SOLIDΒ (κ°μ²΄μ§ν₯μ€κ³)
Single Responsibility Principle (λ¨μΌ μ± μ μμΉ): νλμ ν΄λμ€λ νλμ μν λ§ ν΄μΌ ν¨.
Open - Close Principle (κ°λ°© νμ μμΉ) : νμ₯(μμ)μλ μ΄λ €μκ³ , μμ μλ λ«ν μμ΄μΌ ν¨.
Liskov Substitution Principle (리μ€μ½ν μΉν μμΉ): μμμ΄ λΆλͺ¨μ μ리μ νμ κ΅μ²΄λ μ μμ΄μΌ ν¨.
Interface Segregation Principle (μΈν°νμ΄μ€ λΆλ¦¬ μμΉ) : μΈν°νμ΄μ€κ° μ λΆλ¦¬λμ΄μ, ν΄λμ€κ° κΌ νμν μΈν°νμ΄μ€λ§ ꡬννλλ‘ ν΄μΌν¨.
Dependency Inversion Property : μμ λͺ¨λμ΄ νμ λͺ¨λμ μμ‘΄νλ©΄ μλ¨.λ λ€ μΆμνμ μμ‘΄νλ©°, μΆμνλ μΈλΆ μ¬νμ μμ‘΄νλ©΄ μλ¨.
4. λμμΈ ν¨ν΄μ λΆλ₯
μμ± ν¨ν΄ (Creational) : κ°μ²΄μ μμ± λ°©μ κ²°μ => κ°μ²΄μ μμ±κ³Ό μ‘°ν©μ μΊ‘μνν΄ νΉμ κ°μ²΄κ° μμ±λκ±°λ λ³κ²½λμ΄λ νλ‘κ·Έλ¨ κ΅¬μ‘°μ μν₯μ ν¬κ² λ°κ² λ°μ§ μλλ‘ μ μ°μ±μ μ 곡
ꡬ쑰 ν¨ν΄ (Structural) : κ°μ²΄κ°μΒ κ΄κ³λ₯Ό μ‘°μ§ => ν΄λμ€λ κ°μ²΄λ₯Ό μ‘°ν©ν΄ λ ν° κ΅¬μ‘°λ₯Ό λ§λλ ν¨ν΄( μλ‘λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό μ§λ 2κ°μ κ°μ²΄λ₯Ό λ¬Άμ΄ λ¨μΌ μΈν°νμ΄μ€λ₯Ό μ 곡νκ±°λ μλ‘λ€λ₯Έ κ°μ²΄λ€μ λ¬Άμ΄μ μλ‘μ΄κΈ°λ₯μ μ 곡νλ ν¨ν΄μ λ§νλ€.)
νμ ν¨ν΄ (Behavioral): κ°μ²΄μΒ νμλ₯Ό μ‘°μ§, κ΄λ¦¬, μ°ν© => κ°μ²΄λ ν΄λμ€κ°μ μκ³ λ¦¬μ¦, μ± μλΆλ°°μ κ΄λ ¨λ ν¨ν΄μ΄λ€. νλμ κ°μ±κ° νΌμμ μν ν μ μλ μμ μ μ¬λ¬κ°μ κ°μ²΄λ‘ μ΄λ»κ² λΆλ°°νλμ§μ μ€μ μ λλ λ°©μμ΄λ€.
κ²μ 맡 μ΅λ¨κ±°λ¦¬
function solution(maps) {
// 1.
const dy = [1,0,-1,0];
const dx = [0,1,0,-1];
const row = maps.length;
const col = maps[0].length;
// 2.
const visitCount = [...maps].map((r) => r.map((c) => 1));
// 3.
const queue = [[0,0]]; //μμμ
// 4.
while(queue.length) {
const [y, x] = queue.shift();
// 5.
for(let i = 0; i < 4; i++ ) {
const ny = y + dy[i];
const nx = x + dx[i];
// 6.
if(ny >= 0 && nx >= 0 && ny < row && nx < col) {
// 7.
if(maps[ny][nx] === 1 && visitCount[ny][nx] === 1) {
visitCount[ny][nx] = visitCount[y][x] + 1;
queue.push([ny,nx]);
}
}
}
}
// 8.
return visitCount[row - 1][col - 1] === 1 ? -1 : visitCount[row - 1][col - 1];
}