[자바스크립트 연습문제] 2차원 배열 소용돌이 모양으로 숫자 채우기 - 달팽이 배열 풀이

이 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.






[자바스크립 연습문제] 2차원 배열 소용돌이 모양으로 숫자 채우기 풀이

var ROW_MAX = 5;
var COL_MAX = 5;

//2차원 배열 생성
var arr = [];
for(var i=0; i<ROW_MAX; i++){
  arr[i] = [];
  for(var j=0; j<COL_MAX; j++){
    arr[i][j] = null;
  }
}

//2차원 배열 값 넣기
var num = 0;
var maxNum = ROW_MAX * COL_MAX; // 배열에 들어갈 마지막 번호의 값
var y = 0; // 2차원배열의 현재 y위치
var x = 0; // 2차원배열의 현재 x위치
var dir = 'RIGHT'; // 현재 진행 방향

while(num<maxNum){ // num 가 maxNum 보다 작을 때 계속 반복
  num++;
  arr[y][x] = num; // 현재 x, y좌표에 num을 대입
  switch(dir){ // 현재 진행 방향에 따라 할일을 처리해 주기 위해 switch문 사용 
    case 'RIGHT': // 오른쪽 방향인 경우
      if(x+1<COL_MAX && arr[y][x+1] === null){ // 오른쪽 다음 값이 COL_MAX보다 작고, 오른쪽 다음칸의 값이 null인 경우
        x++; // x좌표를 오른쪽으로 한칸 이동
      }
      else { // 아닌경우
        dir = 'DOWN'; //방향을 아래로 변경
        y++; // y좌표를 아래로 한칸 이동
      }
      break;
    case 'DOWN':
      if(y+1<ROW_MAX && arr[y+1][x] === null){
        y++;
      }
      else {
        dir = 'LEFT';
        x--;
      }
      break;
    case 'LEFT':
      if(x-1>=0 && arr[y][x-1] === null){
        x--;
      }
      else {
        dir = 'UP';
        y--;
      }
      break;
    case 'UP':
      if(y-1>=0 && arr[y-1][x] === null){
        y--;
      }
      else {
        dir = 'RIGHT';
        x++;
      }
      break;
  }
}

//출력
TMS.clearScreen();
for(var i=0; i<ROW_MAX; i++){
  for(var j=0; j<COL_MAX; j++){
    TMS.insertText(arr[i][j].toString().padStart(3," "));
  }
  TMS.insertText("\n\r");
}

x, y좌표값과 방향을 저장해둘 변수를 만들었고 방향에 따라 각각 다른 조건을 두고 좌표와 방향을 이동하며 값을 채우며, 가로길이*세로길이 만큼 반복하면 반복문을 탈출합니다. 주석을 잘 보고 이해해 봅시다. 질문있으시면 댓글남겨주세요.

  • ROW_MAX, COL_MAX의 값을 바꿔가면서 다양한 사이즈의 2차원 배열에서도 문제없이 작동하는지 확인해 봅시다.
  • 다양한 풀이가 있을 수 있습니다. 다른 정답을 찾으셨다면 댓글에 공유해 보세요

댓글

댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP