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

C++로 행렬을 Z자 형태로 출력하는 프로그램 만들기

이번 글에서는 행렬의 요소들을 Z자 형태로 출력하는 C++ 프로그램을 작성하는 방법을 알아보겠습니다. Z 형태 출력은 다음과 같은 순서로 진행됩니다.

  • 첫 번째 행: 행렬의 가장 윗줄에 있는 모든 요소를 출력합니다.
  • 반대각선: 오른쪽 위에서 왼쪽 아래로 내려가는 대각선상의 요소들을 출력합니다. 단, 양 끝 모서리는 이미 첫 번째 행과 마지막 행에 포함되어 있으므로 건너뜁니다.
  • 마지막 행: 행렬의 가장 아랫줄에 있는 나머지 요소들을 출력합니다.

예를 들어 아래와 같은 4×4 행렬이 주어졌다고 가정해 보겠습니다.

5 8 7 1
2 3 6 4
1 7 8 9
4 8 1 5

위 행렬을 Z 형태로 출력하면 결과는 다음과 같습니다.

5, 8, 7, 1, 6, 7, 4, 8, 1, 5

알고리즘

printMatrixZ(mat)

시작
   첫 번째 행을 출력한다
   i := 1, j := n-2
   i < n 이고 j >= 0 인 동안 반복:
      mat[i, j] 출력
      i := i + 1, j := j - 1
   반복 종료
   마지막 행을 출력한다
종료

C++ 코드 예제

#include<iostream>
#define MAX 4
using namespace std;

// 행렬을 Z 형태로 출력하는 함수
void printMatrixZ(int mat[][MAX], int n){
    // 1. 첫 번째 행 출력
    for(int i = 0; i<n; i++){
        cout << mat[0][i] << " ";
    }
    // 2. 반대각선 요소 출력 (오른쪽 위 → 왼쪽 아래)
    int i = 1, j = n-2;
    while(i < n && j >= 0){
        cout << mat[i][j] << " ";
        i++;
        j--;
    }
    // 3. 마지막 행 출력
    for(int i = 1; i<n; i++){
        cout << mat[n-1][i] << " ";
    }
}

int main() {
    int matrix[][MAX] = {{5, 8, 7, 1},
        {2, 3, 6, 4},
        {1, 7, 8, 9},
        {4, 8, 1, 5}
    };
    printMatrixZ(matrix, 4);
}

출력 결과

5 8 7 1 6 7 4 8 1 5

동작 원리 및 복잡도 분석

코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.

  • 첫 번째 for 루프가 0행의 모든 요소를 출력합니다. (5 8 7 1)
  • while 루프는 인덱스 i를 증가시키고 j를 감소시키며 반대각선 방향의 요소들을 출력합니다. 이때 마지막 행의 첫 번째 열 요소(mat[n-1][0])까지 함께 처리됩니다. (6 7 4)
  • 마지막 for 루프가 마지막 행의 나머지 요소들을 출력합니다. (8 1 5)

이 알고리즘은 행렬 전체가 아닌 테두리와 대각선 요소만 방문하므로 시간 복잡도는 O(n)입니다. 또한 별도의 추가 메모리를 사용하지 않으므로 공간 복잡도는 O(1)로 매우 효율적입니다.