배열 101: 나선형 순회

프로그래밍 초보자를 위한 일련의 구현 문제입니다. 첫 번째 부분은 2차원 배열의 나선형 순회입니다.

의문:



n개의 행과 m개의 열이 있는 2차원 배열이 주어집니다.
나선형 순서로 1차원 배열을 출력해야 합니다.

입력:



입력배열[][] ={
{1, 2, 3, 4},
{12,13,14,5},
{11,16,15,6},
{10, 9, 8, 7},
}

산출:



{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}

해결책



주어진 배열을 오른쪽, 아래쪽, 왼쪽 및 위쪽 방향으로 순회합니다.
한 코너 케이스는 나선형 1D 배열의 전체 요소가 이미 행*열과 같은지 확인해야 한다는 것입니다.

vector<int> spiralTraverse(vector<vector<int>> array) {

    int column = array[0].size();
    int row = array.size();

    vector<int>spiralArray; // output array

    int i = 0, j = 0, x = 0;

    int rowCount = row -1;
    int columnCount = column;
    int count=0;
    while (spiralArray.size() < row*column) {

        x = 0;

        while (x < columnCount) {
            spiralArray.push_back(array[i][j]);
            j++, x++; count++;
        }  //traverse right side through columns

        j--;
        columnCount--;
        i++; x = 0;
      if(count < row*column)
         while (x < rowCount) { // traverse downwards  through rows
            spiralArray.push_back(array[i][j]);
            i++, x++; count++;
         } 

        rowCount--;
        x = 0, i--;
        j--;
        if(count < row*column)
         while (x < columnCount) { // traverse left side
            spiralArray.push_back(array[i][j]);
            j--, x++; count++;
         }
        columnCount--;

        j++;
        i--;
        x = 0;

        if(count < row*column)
         while (x < rowCount) { // traverse upward through rows
            spiralArray.push_back(array[i][j]);
            i--, x++; count++;
        }
        rowCount--;
        i++;
        j++;
     }

    return spiralArray;
}

좋은 웹페이지 즐겨찾기