Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍: 행렬을 스네이크 패턴으로 출력하는 방법

n×n 크기의 2차원 배열이 주어졌을 때, 각 요소의 원래 위치를 변경하지 않고 배열의 요소를 스네이크(지그재그) 패턴으로 출력하는 프로그램을 만들어 보겠습니다.

스네이크 패턴이란 첫 번째 행은 왼쪽에서 오른쪽으로, 다음 행은 오른쪽에서 왼쪽으로 출력하는 방식으로, 마치 뱀이 기어가는 모양처럼 행마다 방향을 번갈아 가며 순회하는 것을 말합니다.

예제

입력: arr[]= 100 99 98 97
   93 94 95 96
   92 91 90 89
   85 86 87 88
출력: 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85

동작 원리

프로그램은 행렬의 각 행을 순서대로 탐색하면서 해당 행이 짝수 번째인지 홀수 번째인지 확인합니다.

  • 행 인덱스가 짝수이면 해당 행의 요소를 왼쪽에서 오른쪽으로 출력합니다.

  • 행 인덱스가 홀수이면 해당 행의 요소를 오른쪽에서 왼쪽으로 출력합니다.

이렇게 하면 배열의 실제 데이터는 전혀 변경되지 않은 채 출력 순서만 스네이크 패턴으로 바뀌게 됩니다.

알고리즘

시작
1단계 -> 행과 열의 크기를 선언합니다 (예: 4x4)
2단계 -> 변수 i, j와 요소를 포함한 배열 arr[][]를 선언합니다
3단계 -> 반복문: i=0부터 i<M까지 i++
   만약 i%2==0 이라면
     반복문: j=0부터 j<N까지 j++
       arr[i][j] 출력
     반복문 끝
   그렇지 않다면
     반복문: j=N-1부터 j>=0까지 j--
       arr[i][j] 출력
     반복문 끝
종료

C 언어 구현 예제

#include<stdio.h>
#define M 4
#define N 4
int main() {
   int i,j;
   int arr[M][N] = {
      { 100, 99, 98, 97 },
      { 93, 94, 95, 96 },
      { 92, 91, 90, 89 },
      { 85, 86, 87, 88 }
   };
   for (i = 0; i < M; i++) { // 행 순회
      if (i % 2 == 0) {
         for (j = 0; j < N; j++) // 열 순회 (왼쪽 → 오른쪽)
            printf("%d ",arr[i][j]);
      } else{
         for (j = N - 1; j >= 0; j--) // 열 순회 (오른쪽 → 왼쪽)
            printf("%d ",arr[i][j]);
      }
   }
   return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85

정리

이 방식의 핵심은 단순히 행 인덱스를 2로 나눈 나머지(i % 2)를 확인하는 것입니다. 짝수 행과 홀수 행의 열 순회 방향만 바꾸면 별도의 추가 배열이나 데이터 복사 없이도 스네이크 패턴 출력을 쉽게 구현할 수 있습니다. 시간 복잡도는 O(M×N)으로, 행렬의 모든 요소를 한 번씩만 방문하므로 매우 효율적입니다.