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

C++로 행렬을 역파형(Reverse Wave Form)으로 출력하는 방법

이 문제에서는 하나의 행렬이 주어지며, 우리의 과제는 이 행렬을 역파형(reverse waveform) 형태로 한 줄에 출력하는 것입니다.

예시를 통해 문제를 더 명확하게 이해해 보겠습니다.

입력:
1 4 6 11
2 5 8 54
7 9 3 43
1 7 4 34
출력: 11 54 43 34 4 3 8 6 4 5 9 7 1 7 2 1

문제 해결 접근 방법

이 문제를 해결하려면 행렬의 역파형을 출력해야 합니다. 그 방법은 다음과 같습니다.

  • 먼저 마지막 열의 요소들을 위에서 아래 방향(내림차순)으로 출력합니다.
  • 그다음 뒤에서 두 번째 열의 요소들은 아래에서 위 방향(오름차순)으로 출력합니다.
  • 이런 식으로 방향을 번갈아 가며 첫 번째 열까지 반복합니다.

즉, 열을 오른쪽에서 왼쪽으로 이동하면서 각 열마다 출력 방향을 위→아래, 아래→위로 교대로 바꾸는 것이 핵심입니다.

구현 예제

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

#include<iostream>
using namespace std;
#define R 4
#define C 4
void printReverseWaveForm(int m, int n, int arr[R][C]) {
int i, j = n - 1, wave = 1;
while (j >= 0) {
if (wave == 1) {
for (i = 0; i < m; i++)
cout<<arr[i][j]<<" ";
wave = 0;
j--;
} else {
for (i = m - 1; i >= 0; i--)
cout<<arr[i][j]<<" ";
wave = 1;
j--;
}
}
}
int main() {
int arr[R][C] = {
{ 1, 5, 7, 98 },
{ 15, 22, 45, 12 },
{ 5, 10, 21, 34 },
{ 31, 24, 45, 60 }
};
cout<<"주어진 행렬의 역파형 :\n";
printReverseWaveForm(R, C, arr);
return 0;
}

실행 결과

주어진 행렬의 역파형 −
98 12 34 60 45 21 45 7 5 22 10 24 31 5 15 1

코드 동작 원리

위 코드에서 wave 변수는 현재 출력 방향을 나타냅니다. wave == 1일 때는 해당 열을 위에서 아래로 순회하고, wave == 0일 때는 아래에서 위로 순회합니다. 열 인덱스 j는 마지막 열(n-1)부터 시작하여 매 반복마다 1씩 감소하며, 모든 열을 처리할 때까지 진행됩니다.

이 알고리즘의 시간 복잡도는 O(m×n)으로, 행렬의 모든 요소를 정확히 한 번씩 방문하므로 최적의 성능을 보입니다.