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

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

행렬(matrix)이 주어졌을 때, 각 행에서 가장 큰 요소를 찾아 출력하는 문제를 살펴보겠습니다. 이 작업은 매우 간단합니다. 각 행마다 최댓값 변수를 초기화한 후, 해당 행의 모든 요소를 하나씩 비교하면서 더 큰 값이 나타나면 갱신하고, 행이 끝나면 그 값을 출력하면 됩니다.

알고리즘 동작 원리

핵심 로직은 다음과 같습니다.

1. 바깥쪽 반복문으로 행렬의 각 행을 순회합니다.
2. 각 행의 첫 번째 요소를 임시 최댓값으로 설정합니다.
3. 안쪽 반복문으로 두 번째 요소부터 끝까지 탐색하며, 현재 최댓값보다 큰 요소가 있으면 값을 교체합니다.
4. 한 행의 탐색이 끝나면 구해진 최댓값을 출력합니다.

예제 코드

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

void largestInEachRow(int mat[][MAX], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        int max_row_element = mat[i][0];
        for (int j = 1; j < cols; j++) {
            if (mat[i][j] > max_row_element)
                max_row_element = mat[i][j];
        }
        cout << max_row_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 }
    };
    largestInEachRow(mat, row, col);
}

출력 결과

81
84
23
44

코드 설명

위 예제에서 largestInEachRow 함수는 행렬과 행·열의 개수를 매개변수로 받습니다. 함수 내부에서는 먼저 각 행의 첫 번째 요소(mat[i][0])를 기준 최댓값으로 지정한 뒤, 나머지 요소들과 차례대로 비교하여 더 큰 값이 발견될 때마다 갱신합니다.

예를 들어 첫 번째 행 {3, 4, 1, 81}에서는 3 → 4 → 81 순서로 최댓값이 갱신되어 최종적으로 81이 출력됩니다. 같은 방식으로 두 번째 행에서는 84, 세 번째 행에서는 23, 네 번째 행에서는 44가 각각 출력됩니다.

이 알고리즘의 시간 복잡도는 행렬의 모든 요소를 한 번씩만 확인하므로 O(rows × cols)입니다. 즉, 행렬의 크기에 비례하는 선형 시간 안에 문제를 해결할 수 있습니다.