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 |