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

C++로 지그재그 패턴 행렬 출력하기 — 왼쪽→오른쪽, 오른쪽→왼쪽 방향 교차

이 문제에서는 2차원 배열(행렬)이 주어지며, 모든 요소를 특정 규칙에 따라 순서대로 출력해야 합니다. 규칙은 다음과 같습니다. 첫 번째 행은 왼쪽에서 오른쪽으로, 두 번째 행은 오른쪽에서 왼쪽으로, 세 번째 행은 다시 왼쪽에서 오른쪽으로 출력하는 식으로 행마다 방향을 번갈아 가며 진행합니다.

문제 예시

예제를 통해 문제를 더 쉽게 이해해 보겠습니다.

입력: array = {
    {2, 5}
    {4, 9}
}
출력: 2 5 9 4

위 예시를 보면, 첫 번째 행의 {2, 5}는 왼쪽에서 오른쪽으로 그대로 출력되고, 두 번째 행의 {4, 9}는 방향이 바뀌어 오른쪽에서 왼쪽으로 읽혀 9 4가 됩니다.

접근 방법

이 문제를 해결하는 핵심 아이디어는 다음과 같습니다.

각 행을 순회할 때 현재 출력 방향(왼쪽→오른쪽 또는 오른쪽→왼쪽)에 맞춰 요소를 출력하고, 한 행의 출력이 끝날 때마다 방향을 나타내는 플래그(flag) 변수를 반전시켜 다음 행의 방향을 전환합니다.

이 방법은 간단하면서도 효율적이며, 시간 복잡도는 O(R×C)입니다. 여기서 R은 행의 개수, C는 열의 개수를 의미합니다.

구현 예제

다음은 위 해결 방법을 구현한 C++ 프로그램입니다.

#include<iostream>
using namespace std;
#define R 3
#define C 3
void printAlternateMatrix(int arr[R][C]) {
    bool direction = true;
    for (int i=0; i<R; i++){
        if (direction){
            for (int j=0; j<C; j++)
                printf("%d ", arr[i][j]);
        } else{
            for (int j=C-1; j>=0; j--)
                printf("%d ",arr[i][j]);
        }
        direction = !direction;
    }
}
int main() {
    int arr[][C] = {
        { 23 , 50 , 4 },
        { 89 , 9 , 34 },
        { 75 , 1 , 61 },
    };
    cout<<"Matrix in alternate order is :\n";
    printAlternateMatrix(arr);
    return 0;
}

코드 설명

불린 타입의 direction 변수가 출력 방향을 제어합니다. 값이 true일 때는 인덱스 j를 0부터 C-1까지 증가시키며 왼쪽에서 오른쪽으로 출력하고, false일 때는 j를 C-1부터 0까지 감소시키며 오른쪽에서 왼쪽으로 출력합니다. 한 행의 출력이 끝나면 direction = !direction;으로 방향을 뒤집어 다음 행에 적용합니다.

실행 결과

위 프로그램을 실행하면 행렬이 번갈아 가는 순서로 출력됩니다.

23 50 4 34 9 89 75 1 61

결과를 살펴보면, 첫 번째 행(23 50 4)은 정방향, 두 번째 행(34 9 89)은 역방향, 세 번째 행(75 1 61)은 다시 정방향으로 출력된 것을 확인할 수 있습니다.