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