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

** 이 게시물은 텍스트게임메이커를 사용하고 있습니다. '시작하기에 앞서 & 텍스트게임메이커' 글을 반드시 먼저 읽어 보세요.

2차원 배열 소용돌이 모양으로 숫자 채우기

아래 그림처럼 5*5 2차원배열에 숫자를 소용돌이 모양으로 채워봅시다.


실행된 코드는 아래와 같이 출력됩니다.

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

지금까지와 마찬가지로 컴퓨터에게는 정확한 규칙을 제시해 주어야 합니다. 우선 위 그림을 잘 보고 규칙을 생각해 봅시다.

  1. 첫번째 줄의 가장 왼쪽칸에서 시작합니다.
  2. 오른쪽으로 이동하며 빈칸에 숫자를 채워넣습니다. 오른쪽에 더이상 빈칸이 없으면 방향을 아래로 바꿉니다.
  3. 아래쪽으로 이동하며 빈칸에 숫자를 채워넣습니다. 아래쪽에 더이상 빈칸이 없으면 방향을 왼쪽으로 바꿉니다.
  4. 왼쪽으로 이동하며 빈칸에 숫자를 채워넣습니다. 왼쪽에 더이상 빈칸이 없으면 방향을 위쪽으로 바꿉니다.
  5. 위쪽으로 이동하며 빈칸에 숫자를 채워넣습니다. 위쪽에 더이상 빈칸이 없으면 방향을 오른쪽으로 바꿉니다.
  6. 2에서 5번까지를 모든칸에 숫자가 채워질 때까지 반복합니다.

물론 제가 규칙과 비슷하지만 완전히 똑같지는 않은 규칙을 떠올리셨을 수도 있고, 완전히 다른 규칙을 떠올리셨을 수도 있습니다. 모두 정답입니다만, 제가 모든 규칙에 대해 풀이를 해드릴 수는 없으므로 이 연습문제에서는 위의 규칙을 사용해서 코드를 만들어 봅시다.

이전 연습문제와 마찬가지로 아래의 코드에서 '//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차원 배열 값 넣기
/* 여기에 2차원 배열에 값을 넣는 코드를 입력 */

//출력
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");
}

힌트

아래 박스의 안을 드래그하면 추가 힌트가 나타납니다. 추가힌트를 보지 않고 한번 시도해 본 후, 잘 안될 때 확인해 보세요.

힌트 1-a

2차원 배열 순서대로 채우기, 2차원 배열 지그재그로 채우기와 달리 좌우뿐만 아니라 상하로도 숫자를 채워야 합니다. 지금까지는 한줄이 완료되면 다음줄로 넘어가는 구조였기 때문에 2중 반복문으로 문제를 해결하였지만, 이제는 2차원 배열 전체를 상하좌우로 이동하므로 2중반복문으로 해결할 수 없습니다. (제가 위에 제시한 방법이 아닌 다른 방법중에는 2중반복문을 사용하여 해결할 수 있는 방법도 있습니다.)

힌트 1-b

이중 반복문은 아니지만 반복문이 필요하긴 합니다. 위 규칙의 2-5를 '반복'해야하기 때문이죠. 이 반복문안에서 상하좌우로 움직이며 칸을 채워나가게 됩니다. 그러다가 특정한 조건이 만족되면 반복을 끝냅니다.

힌트 1-c

이중반복문이 아니므로 지금까지 사용했던 i, j와 같은 반복문 인덱스 변수를 이차원배열의 좌표로 사용할 수 없게 되었습니다. 다만 이를 저장하기 위한 새로운 변수들을 선언하여야 합니다.

힌트 2-a

이 문제에는 '방향'이 중요한 역할을 합니다. '방향'에 따라 하는 일이 달라지기 때문입니다. 즉, 컴퓨터는 '방향'을 기억하고 있어야 하고, '방향'에 따라 작업을 수행해야 합니다.

힌트 2-b

컴퓨터는 '방향'을 기억하고 있어야 하고 -> 방향이 변수로 사용되어야 합니다.
'방향'에 따라 -> 즉 조건문을 사용해야 합니다.

댓글

댓글쓰기

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

UP