행렬(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)입니다. 즉, 행렬의 크기에 비례하는 선형 시간 안에 문제를 해결할 수 있습니다.