이중 배열은 일차원 배열과 너무 달라서 생각을 전환하는 데 아주 오랜 시간이 걸린 것 같다...
+ 첫줄을 그릴때만 정사각형의 한 변의 크기만큼 그린다.
+ 방향을 바꾸면서 길이는 -1씩 작아지고 2번씩 그린 후 방향을 바꾼다.
+ arr[y][x] 각 인덱스는 x축, y축으로 생각한다.
+ 값을 더해주면서 방향을 바꾸는 변수 선언.
// 달팽이 만들기
function answer(length) {
let result = []
// 이중 배열 만들기
for(let i = 0; i < length; i++){
result[i] = [];
}
let x, y, direction, num;
direction = 1;
x = y = num = 0;
x--; // x의 인덱스 0부터 시작하니까
while(1){
for(let i = 0; i < length; i++){
x += direction
result[y][x] = ++num; // 1씩 누적
}
length--; // 길이 줄이기, x축 -> y축으로 바뀜
if(length == 0) break;
for(let i = 0; i < length; i++){
y += direction;
result[y][x] = ++num;
}
direction *= -1; // 방향 바꾸기
}
return result;
}
/* main code */
let input = [
// TC: 1
3,
// TC: 2
5,
// TC: 3
6,
];
for (let i = 0; i < input.length; i++) {
process.stdout.write(`#${i + 1} `);
console.log(answer(input[i]));
}
direction *= -1; // 방향 바꾸기
여기서 방향은 x,y축이 아니라 배열에서 증가 혹은 감소하면서 그리는 방향을 의미한다.