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

C++로 2차원 행렬의 최댓값 찾기: 초보자를 위한 단계별 가이드

이 글에서는 n×m 크기의 2차원 행렬이 주어졌을 때, C++ 프로그래밍으로 행렬 내 최대 요소(최댓값)를 찾는 방법을 알아보겠습니다.

문제 설명

주어진 행렬에서 가장 큰 값을 가진 요소를 찾아 반환하는 것이 목표입니다. 별도의 복잡한 조건 없이 단순히 행렬 전체를 탐색하여 최댓값을 구하는 기본적인 문제입니다.

예제로 문제 이해하기

입력

mat[3][3] = {{4, 1, 6},
{5, 2, 9},
{7, 3, 0}}

출력

9

위 예제에서 행렬의 모든 요소 중 가장 큰 값은 9이므로 출력 결과는 9가 됩니다.

해결 접근 방법

이 문제의 해결 방법은 매우 직관적입니다. 핵심 아이디어는 다음과 같습니다.

  1. 행렬의 첫 번째 요소(mat[0][0])를 초기 최댓값인 maxVal로 설정합니다.
  2. 두 개의 중첩 반복문을 사용하여 행렬의 모든 요소를 순회합니다.
  3. 순회 중 현재 요소가 maxVal보다 크면 해당 값으로 maxVal을 갱신합니다.
  4. 탐색이 끝나면 최종 maxVal을 반환합니다.

이 방식은 행렬의 크기가 n×m일 때 시간 복잡도가 O(n×m)이며, 공간 복잡도는 O(1)로 추가 메모리가 거의 필요하지 않아 효율적입니다.

C++ 구현 코드

아래는 위 해결 방법을 실제로 구현한 프로그램입니다.

#include <iostream>
using namespace std;
#define n 3
#define m 3

int CalcMaxVal(int mat[n][m]) {
    int maxVal = mat[0][0];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (mat[i][j] > maxVal)
                maxVal = mat[i][j];
    return maxVal;
}

int main(){
    int mat[n][m] = {{4, 1, 6},{5, 2, 9},{7, 3, 0}};
    cout<<"행렬의 최대 요소는 "<<CalcMaxVal(mat);
    return 0;
}

실행 결과

행렬의 최대 요소는 9

코드 동작 원리 상세 분석

  • 초기화: maxVal을 행렬의 첫 번째 요소로 초기화하여, 음수만 포함된 행렬에서도 올바르게 동작하도록 합니다. 만약 0으로 초기화하면 모든 요소가 음수인 경우 잘못된 결과가 나올 수 있습니다.
  • 중첩 반복문: 바깥쪽 반복문(i)은 행(row)을, 안쪽 반복문(j)은 열(column)을 순회하여 행렬의 모든 위치를 한 번씩 방문합니다.
  • 비교 및 갱신: 각 요소를 현재 최댓값과 비교하여 더 큰 값이 발견되면 즉시 갱신합니다.

마무리

행렬의 최댓값 찾기는 배열 탐색의 기본기를 익힐 수 있는 대표적인 문제입니다. 이와 유사하게 최솟값을 찾거나, 각 행·열별 최댓값을 구하는 등의 변형 문제에도 동일한 탐색 기법을 활용할 수 있으니 응용해 보시기 바랍니다.