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

C++로 2차원 배열(매트릭스)의 대각선 요소 출력하기

n×n 크기의 2차원 배열이 주어졌을 때, 해당 매트릭스의 주 대각선반대각선(안티 다이애고널)에 위치한 요소들을 순서대로 출력하는 것이 이번 글의 목표입니다.

예를 들어 아래와 같은 4×4 매트릭스가 있다고 가정해 보겠습니다.

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

위 출력 결과에서 첫 번째 줄은 왼쪽 위에서 오른쪽 아래로 내려가는 주 대각선(1, 6, 11, 16)이며, 두 번째 줄은 오른쪽 위에서 왼쪽 아래로 내려가는 반대각선(4, 7, 10, 13)입니다.

알고리즘

두 개의 대각선을 각각 순회하면서 요소를 출력하면 됩니다. 핵심 규칙은 다음과 같습니다.

  • 주 대각선: 행 인덱스와 열 인덱스가 동일한 위치 → mat[i][i]
  • 반대각선: 열 인덱스가 (전체 크기 - 1 - 행 인덱스)인 위치 → mat[i][R-1-i]
START
Step 1 -> 변수 r=4, c=4, i, j 선언
Step 2 -> mat[r][c] 배열을 요소들로 초기화
Step 3 -> i=0부터 i<r까지 반복하며 mat[i][i] 출력 (주 대각선)
Step 4 -> 줄바꿈(\n) 출력
Step 5 -> i=0부터 i<r까지 반복하며 mat[i][4-1-i] 출력 (반대각선)
END
STOP

C++ 구현 예제

#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
    int R=4,C=4,i,j;
    int mat[R][C] = { {1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}};
    // 주 대각선 출력
    for(i=0;i<R;i++) {
        cout<<mat[i][i]<<" ";
    }
    cout<<"\n";
    // 반대각선 출력
    for(i=0;i<R;i++) {
        cout<<mat[i][4-1-i]<<" ";
    }
}

실행 결과

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

1 6 11 16
4 7 10 13

시간 복잡도

두 개의 루프가 각각 n번씩 실행되므로 시간 복잡도는 O(n)이며, 추가적인 메모리를 사용하지 않으므로 공간 복잡도는 O(1)입니다.