FrontEnd/프로그래머스

[JS] 삼각 달팽이

728x90

삼각형을 만드는 문제였다.

 

2차원 배열이므로 아래 , 오른쪽 , 왼쪽 대각선 세 방향으로 배열이 뻗어나갈 수 있도록 dx와 dy를 정의해주었다.

 

 

n*n 크기의 0으로 채워진 2차원 배열을 하나 생성해준 후 while문을 활용해 더이상 갈 수 없을때까지 수를 채워주었다.

 

 

nx,ny를 통해서 현재 진행방향의 다음 부분이 0이 아니거나 갈 수 없는경우

 

k = (k+1)%3 을통해서 방향전환을 해주었다.

 

방향전환을 해 주었는데도 갈 수 없는 경우라면 프로그램을 종료하고 삼각형 부분을 배열에 순차적으로 넣어 반환하였다.

 

 

 

 

function solution(n) {
    
    const dx = [0,1,-1]
    const dy = [1,0,-1]
    
    const arr = [...new Array(n)].map(v => new Array(n).fill(0))
    
    let x = 0;
    let y = 0;
    let cnt = 1
    let k = 0
    
    while(1) {
        arr[y][x] = cnt++
        const [nx,ny] = [x + dx[k] , y + dy[k]]
        
        if (0<= nx && nx < n && 0<= ny && ny<n && arr[ny][nx]===0){
            [x,y] = [nx,ny]
            continue
        }
        
        k = (k+1)%3
        x = x + dx[k]
        y = y + dy[k]
        
        if (0<= x && x < n && 0<= y && y<n && arr[y][x]===0) continue
        break
        
    }
    
    let ret = []
    
    for (let i = 0 ; i < n ; i++) {
        for (let j = 0; j <= i ; j++) {
            ret.push(arr[i][j])
        }
    }
    
    return ret
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 튜플  (0) 2023.06.21
[JS] 수식 최대화  (0) 2023.06.20
[JS] 쿼드압축 후 개수 세기  (0) 2023.06.18
[JS] 메뉴 리뉴얼  (0) 2023.06.16
[JS] 순위 검색  (0) 2023.06.16