<AlgoHanKyul/> 뇌말랑 Lv0 문제풀이 - 2

<AlgoHanKyul/> 뇌말랑 Lv0 문제풀이 - 2

·

2 min read

Problem.

Learn.

  • arr[[]]와 같이 빈 배열로 선언하는 표현하는 것도 있지만, Array.from을 쓸 수도 있음
  • 복잡해 보이지만, 문제를 잘게 쪼개 단순하게 생각해야 함
    • 결국에는 1 ~ n*n 까지 저장되야 함
    • 그에 따라 handler가 자동차 핸들처럼 방향을 핸들링함
    • col은 열로, n과 같으면 방향을 바꿔야 함
      • 0보다 작아도 방향을 바꿔야 함
      • 나선형이기 때문에 다음 공간에 값이 있으면 방향을 바꿔야 함
    • row은 행으로, n과 같으면 방향을 바꿔야 함
      • 0보다 작아도 방향을 바꿔야 함
      • 나선형이기 때문에 다음 공간에 값이 있으면 방향을 바꿔야 함
  • Level 0 문제여도, 제품을 만드는 것과 구현력에서 차이가 많이 난다는 걸 깨달음
    • 단순히 'CRUD를 한다. 캐싱을 적용한다. 동시성 이슈를 해결한다.' 등과 굉장히 다른 기조임
    • 앞으로 꾸준히 알고리즘 문제를 풀고, 꼭 복습하는 시간을 가져야 할 듯

Solve.

function solution(n) {
        let arr = Array.from( { length: n }, () => Array(n).fill(null) )
        const size = n * n
        let handler = 'right'
        let col = 0
        let row = 0
        for (let i = 1; i <= size; i = i + 1) { 
            arr[row][col] = i
            if( handler === 'right' ) { 
                if(col + 1 === n || arr[row][col + 1] !== null) {
                    handler = 'down'
                    row = row + 1 
                } else { 
                    col = col + 1
                }
            }
            else if( handler === 'down' ) {
                if(row + 1 === n || arr[row + 1][col] !== null) { 
                    handler = 'left'
                    col = col - 1 
                } else { 
                    row = row + 1
                }
            }
            else if( handler === 'left' ) { 
                if(col - 1 === -1 || arr[row][col - 1] !== null) { 
                    handler = 'up' 
                    row = row - 1
                } else { 
                    col = col - 1
                }
            }
            else if( handler === 'up' ) { 
                if(row - 1 === -1 || arr[row - 1][col] !== null) { 
                    handler = 'right'
                    col = col + 1
                } else {
                    row = row - 1
                }
            }
    }
    return arr
}