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

C 프로그래밍: 마지막 열부터 시작하는 스네이크 패턴 행렬 출력하기


문제 정의

n×n 크기의 2차원 배열이 주어졌을 때, 배열의 원본 위치를 전혀 변경하지 않은 상태에서 마지막 열, 즉 arr[0][n-1] 요소부터 시작해 모든 요소를 스네이크 패턴으로 출력하는 프로그램을 작성해야 합니다.

C 프로그래밍: 마지막 열부터 시작하는 스네이크 패턴 행렬 출력하기

스네이크 패턴이란 첫 행은 오른쪽→왼쪽, 두 번째 행은 왼쪽→오른쪽, 세 번째 행은 다시 오른쪽→왼쪽 순으로 지그재그 형태로 순회하는 출력 방식입니다. 뱀이 기어가는 모습과 유사하다고 해서 붙여진 이름입니다.

예시

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

알고리즘

시작
1단계 → 변수 int n = 5, i, j 선언
2단계 → 요소를 담은 2차원 행렬 배열 선언
3단계 → i = 0부터 i < n까지 반복
  i % 2 == 1인 경우
    j = 0부터 j < n까지 반복하며 arr[i][j] 출력
  그 외의 경우
    j = n-1부터 j >= 0까지 역순으로 반복하며 arr[i][j] 출력
종료

C 코드 구현

#include <stdio.h>
int main(){
    int n = 5;
    int arr[][5]= {
        {10, 20, 30, 40, 50},
        { 60, 70, 80, 90, 100 },
        { 110, 120, 130, 140, 150 },
        { 160, 170, 180, 190, 200 },
        { 210, 220, 230, 240, 250 }
    };
    for (int i = 0; i < n; i++) { // 마지막 열부터 시작해야 하므로
        if (i%2 == 1)
            for (int j = 0; j < n; j++)
                printf("%d ", arr[i][j]);
        else
            for (int j = n - 1; j >= 0; j--)
                printf("%d ", arr[i][j]);
        }
    return 0;
}

실행 결과

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

50 40 30 20 10 60 70 80 90 100 150 140 130 120 110 160 170 180 190 200 250 240 230 220 210

코드 동작 원리

핵심 로직은 각 행의 인덱스 홀짝 여부에 따라 탐색 방향을 바꾸는 것입니다.

  • 짝수 행(i % 2 == 0): 해당 행의 마지막 열(n-1)부터 0번째 열까지 거꾸로 순회합니다.
  • 홀수 행(i % 2 == 1): 해당 행의 0번째 열부터 마지막 열(n-1)까지 정방향으로 순회합니다.

이러한 방향 전환 덕분에 배열의 실제 저장 구조는 그대로 유지되면서도 출력 결과만 스네이크 패턴처럼 나타납니다. 모든 요소를 한 번씩 방문하므로 시간 복잡도는 O(n²)이며, 추가 메모리 없이 원본 배열만으로 해결할 수 있는 효율적인 방법입니다.