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

C++로 행렬의 각 열에서 최댓값 찾는 방법

행렬(matrix)이 주어졌을 때, 각 열(column)에 포함된 요소들 중 가장 큰 값을 찾아 출력하는 것이 이번 글의 목표입니다. 접근 방법은 매우 간단합니다. 열을 하나씩 순회하면서 최댓값 변수를 초기화하고, 해당 열의 모든 행(row) 요소를 비교하여 가장 큰 값을 구한 뒤 출력하면 됩니다.

알고리즘 동작 원리

바깥쪽 반복문은 열 인덱스를 기준으로 진행되며, 안쪽 반복문은 해당 열의 첫 번째 행부터 마지막 행까지 요소를 하나씩 확인합니다. 현재까지의 최댓값보다 큰 요소가 발견되면 최댓값을 갱신하고, 한 열의 탐색이 끝나면 결과를 출력합니다. 전체 시간 복잡도는 O(행 개수 × 열 개수)입니다.

예제 코드

#include<iostream>
#define MAX 10
using namespace std;
void largestInEachCol(int mat[][MAX], int rows, int cols) {
   for (int i = 0; i < cols; i++) {
      int max_col_element = mat[0][i];
   for (int j = 1; j < rows; j++) {
      if (mat[j][i] > max_col_element)
         max_col_element = mat[j][i];
   }
   cout << max_col_element << endl;
   }
}
int main() {
   int row = 4, col = 4;
   int mat[][MAX] = { { 3, 4, 1, 81 },
      { 1, 84, 9, 11 },
      { 23, 7, 21, 1 },
      { 2, 1, 44, 5 }
   };
   largestInEachCol(mat, row, col);
}

실행 결과

23
84
44
81

코드 설명

예제에서 사용된 4×4 행렬을 열 단위로 살펴보면 다음과 같습니다.

  • 첫 번째 열: 3, 1, 23, 2 중 최댓값은 23
  • 두 번째 열: 4, 84, 7, 1 중 최댓값은 84
  • 세 번째 열: 1, 9, 21, 44 중 최댓값은 44
  • 네 번째 열: 81, 11, 1, 5 중 최댓값은 81

각 열의 첫 번째 요소(mat[0][i])로 최댓값을 초기화하는 부분이 핵심입니다. 이렇게 하면 별도의 큰 값이나 음수 처리 없이도 어떤 정수 행렬이든 올바르게 동작합니다. 만약 행렬에 음수만 포함된 경우에도 첫 번째 요소로 초기화하기 때문에 정확한 결과를 얻을 수 있습니다.