[HellCoders] Study 8일차

μ˜μ•„Β·2021λ…„ 8μ›” 12일
0

HellCoders Study

λͺ©λ‘ 보기
8/9
post-thumbnail

πŸ”₯ μ˜€λŠ˜ν•˜λ£¨λŠ”?

  • μžκΈ°μ†Œκ°œ νŽ˜μ΄μ§€λ§Œλ“€κΈ°
    Who Pageλ₯Ό μž‘μ„±ν•˜κ³ , 각 νŽ˜μ΄μ§€λ³„ ν•„μš”ν•œ λ‚΄μš©μ„ λ³€κ²½ν–ˆλ‹€. 이전에 νŽ˜μ΄μ§€λ₯Ό λ””μžμΈ ν•΄λ‘μ—ˆμ§€λ§Œ, κ·Έ λ””μžμΈμœΌλ‘œ νŽ˜μ΄μ§€λ₯Ό λ§Œλ“œλŠ”κ²ƒμ€ μ»¨ν„΄μΈ λ‚˜ λ³΄μ—¬μ§€λŠ” 뢀뢄이 λΆ€μ‘±ν•˜λ‹€κ³  μƒκ°ν•΄μ„œ 계속 μ–΄λ–»κ²Œ λ ˆμ΄μ•„μ›ƒμ„ 바꿀지 고민을 많이 ν•˜κ²Œλ˜μ—ˆλ‹€. μ •ν™•ν•˜κ²Œ κΈ°νšμ΄λ‚˜ λ””μžμΈμ„ μ™„μ„±ν•˜μ§€ μ•Šκ³  μž‘μ—…ν•˜λ‹€λ³΄λ‹ˆ μˆ˜μ •ν•˜λŠ”μΌμ΄ λ„ˆλ¬΄ 많고 μŠ€νŠΈλ ˆμŠ€λ„ 많이 λ°›μ•˜λ‹€.
    (λ‹€λ₯Έ μŠ€ν„°λ”” 쑰원듀은 슬슬 이λ ₯μ„œλ₯Ό λ„£κ³  면접을 보러 λ‹€λ‹ˆκΈ°λ–„λ¬Έμ— λ­”κ°€ μƒλŒ€μ μœΌλ‘œ μ‘°κΈ‰ν•΄μ§€λŠ” κΈ°λΆ„? 😭)

    Who pageλŠ” 처음 λ‘œλ”©λ˜μ—ˆμ„λ•Œ, 순차적으둜 λ‚˜νƒ€λŠ” λŠλ‚Œμ˜ μ• λ‹ˆλ©”μ΄μ…˜μ„ λ„£μ—ˆκ³ , gridλ₯Ό μ΄μš©ν•΄μ„œ 전체적인 λ ˆμ΄μ•„μ›ƒμ„ μ„€μ •ν•΄λ³΄μ•˜λ‹€.
    아직 gridλŠ” μ΅μˆ™ν•˜μ§€ μ•Šμ•„μ„œ 쑰금 더 κ³΅λΆ€ν•˜κ³  자주 μ‚¬μš©ν•΄μ„œ 빨리 μ΅ν˜€μ•Όκ² λ‹€. containerκ°€ λ˜λŠ” 뢀뢄을 grid-template-rows,grid-template-colunmsλ₯Ό μ‚¬μš©ν•΄μ„œ μ„€μ •ν•˜λ‹ˆκΉ νŽΈν–ˆλ‹€. λ°˜μ‘ν˜•μ„ κ΅¬ν˜„ν• λ•Œλ„ 도움이 많이 λ˜μ—ˆλ‹€.


TIL : λ””μžμΈνŒ¨ν„΄

였늘의 κ°•μ˜ πŸ§‘β€πŸ’»

  • μ–΄μ œ 면접을 보고 온 λ‹€λ₯Έ μŠ€ν„°λ””μ›λΆ„μ΄ μ–΄μ œ λΈ”λ‘œκΉ…ν•œ SSR에 λŒ€ν•œ μ§ˆλ¬Έμ„ λ°›μ•˜λ‹€κ³  ν•΄μ„œ λ¨Έλ¦Ώμ†μœΌλ‘œ μƒκ°ν•΄λ΄€μ§€λ§Œ, 정리가 μž˜λ˜μ§€ μ•Šμ•„μ„œ κ·Έ κ°•μ˜λ₯Ό ν›„λ”± 찾아보고 μ •λ¦¬ν–ˆμ—ˆλ‹€. λ‹€λ₯Έ λΈ”λ‘œκ·Έλ₯Ό μ°Ύμ•„λ³΄λ˜ 쀑 μ½”λ“œμŠ€ν…Œμ΄μΈ  κΈ°κ°„ 쀑 λ°°μ› λ˜ λ””μžμΈνŒ¨ν„΄μ— λŒ€ν•œ λ‚΄μš©μ΄ λ‚˜μ™€μ„œ κ·Έ 뢀뢄도 λ‹€μ‹œ ν•œλ²ˆ μ •λ¦¬ν•˜λ©΄ 쒋을 것 κ°™μ•„μ„œ κ°•μ˜λ₯Ό μ°Ύμ•„λ³΄μ•˜λ‹€.

λ””μžμΈ νŒ¨ν„΄?
=> λ””μžμΈ νŒ¨ν„΄μ€ μΌμ’…μ˜ 섀계 기법이며, 섀계방법이닀 !

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];    
}
profile
μ½”λ”© λ°°μš°λŠ” 아이

0개의 λŒ“κΈ€