[ 선형 자료구조 ] 배열 - 달팽이 만들기 ✅ (문풀)

김수연·2022년 9월 19일
0
post-thumbnail

이중 배열은 일차원 배열과 너무 달라서 생각을 전환하는 데 아주 오랜 시간이 걸린 것 같다...

# 문제 해석 & 해결책

+ 첫줄을 그릴때만 정사각형의 한 변의 크기만큼 그린다.
+ 방향을 바꾸면서 길이는 -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축이 아니라 배열에서 증가 혹은 감소하면서 그리는 방향을 의미한다.

profile
길을 찾고 싶은 코린이 of 코린이

0개의 댓글