이 문제에서는 2차원 행렬이 주어집니다. 그리고 우리의 임무는 행렬의 요소를 시계 반대 방향 나선으로 인쇄하는 것입니다.
시계 반대 방향 나선 형태 − 왼쪽 상단에서 시작하여 시계 반대 방향으로 첫 번째 오른쪽 하단에서 왼쪽 상단으로 가는 나선형 탐색입니다.
반시계 방향 순회는 1 5 9 13 14 15 16 12 8 4 3 2 6 10 11 7이 됩니다.
문제를 이해하기 위해 예를 들어보겠습니다.
Input: 2 4 6 1 7 9 5 0 3 Output: 2 1 5 0 3 9 7
이 문제를 해결하기 위해 4개의 루프를 각각 한 방향으로 사용하고 방향을 초기화하고 그에 따라 순회합니다.
예시
솔루션 구현을 보여주는 프로그램
#include <bits/stdc++.h> using namespace std; #define R 3 #define C 3 void printCounterClockwiseSpiral(int m, int n, int matrix[R][C]){ int i, k = 0, l = 0; int count = 0; int total = m * n; while (k < m && l < n){ if (count == total) break; for (i = k; i < m; ++i){ cout<<matrix[i][l]<<" "; count++; } l++; if (count == total) break; for (i = l; i < n; ++i){ cout<<matrix[m - 1][i]<<" "; count++; } m--; if (count == total) break; if (k < m){ for (i = m - 1; i >= k; --i){ cout<<matrix[i][n - 1]<<" "; count++; } n--; } if (count == total) break; if (l < n){ for (i = n - 1; i >= l; --i){ cout<<matrix[k][i]<<" "; count++; } k++; } } } int main() { int mat[R][C] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} }; cout<<"Conter Clockwise Spiral from of the matrix is :\n"; printCounterClockwiseSpiral(R, C, mat); return 0; }
출력
행렬의 반시계 방향 나선은 -
1 4 7 8 9 6 3 2 5