yngmanie 블로그

알고리즘 - Snail

문제

Given an n x n array, return the array elements arranged from outermost elements to the middle element, traveling clockwise.

array = [[1,2,3],
         [4,5,6],
         [7,8,9]]
snail(array) #=> [1,2,3,6,9,8,7,4,5]

For better understanding, please follow the numbers of the next array consecutively:

array = [[1,2,3],
         [8,9,4],
         [7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]

NOTE: The idea is not sort the elements from the lowest value to the highest; the idea is to traverse the 2-d array in a clockwise snailshell pattern.

NOTE 2: The 0x0 (empty matrix) is represented as en empty array inside an array [[]].

풀이과정

  1. 이중 배열중 첫 번째 배열의 요소 값을 sorted 배열에 담는다.
  2. for문을 돌면서 남은 배열들의 마지막 요소값들을 sorted 배열에 답니다.
  3. 이중 배열에 마지막 배열의 요소들의 값을 반전해서 sorted 배열에 담는다.
  4. for문을 돌면서 남은 배여르이 첫 번째 요소값들을 sorted 배열에 담는다.
  5. while문을 통해 1 ~ 4번을 반복해서 실행한다.

code

snail = function(array) {
  const sorted = [];
  while (array.length) {
    sorted.push(...array.shift());
    for (let i = 0; i < array.length; i++) {
      sorted.push(array[i].pop());
    }
    sorted.push(...(array.pop() || []).reverse());
    for (let i = array.length - 1; i >= 0; i--) {
      sorted.push(array[i].shift());
    }
  }
  return sorted;
};

출처: www.codewars.com