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

C++로 배열에서 가장 큰 요소 찾기: 최댓값과 위치 구하기

배열은 여러 개의 요소를 담을 수 있는 자료구조이며, 배열에서 가장 큰 요소란 나머지 모든 요소보다 값이 큰 요소를 의미합니다.

예시로 이해하기

다음 배열을 살펴보겠습니다.

51724

위 배열에서 가장 큰 요소는 7이며, 인덱스 2에 위치해 있습니다.

그렇다면 배열에서 가장 큰 요소와 그 위치를 찾으려면 어떻게 해야 할까요? 전체 코드는 다음과 같습니다.

전체 코드

#include <iostream>
using namespace std;
int main() {
    int a[] = {4, 9, 1, 3, 8};
    int largest, i, pos;
    largest = a[0];
    for(i=1; i<5; i++) {
        if(a[i]>largest) {
            largest = a[i];
            pos = i;
        }
    }
    cout<<"배열에서 가장 큰 요소는 "<<largest<<"이고, 인덱스 "<<pos<<"에 위치합니다";
    return 0;
}

실행 결과

배열에서 가장 큰 요소는 9이고, 인덱스 1에 위치합니다

코드 동작 원리

위 프로그램에서 a[]는 5개의 요소를 가진 배열이며, 변수 largest에는 배열의 최댓값이 저장되고, pos에는 해당 요소의 인덱스가 저장됩니다.

먼저 largest에 배열의 첫 번째 요소를 저장한 뒤, 인덱스 1부터 마지막 요소까지 순회하는 for 루프를 시작합니다. 루프가 한 번 반복될 때마다 현재까지의 최댓값 largesta[i]를 비교하여, a[i]가 더 크면 그 값을 largest에 저장하고 해당 인덱스 ipos에 저장합니다.

핵심 로직은 다음 코드 조각과 같습니다.

for(i=1; i<5; i++) {
    if(a[i]>largest) {
        largest = a[i];
        pos = i;
    }
}

루프가 모두 끝나면 largest에는 배열 전체에서 가장 큰 값이, pos에는 그 요소의 인덱스가 들어 있게 됩니다. 마지막으로 이 두 값을 화면에 출력합니다.

cout<<"배열에서 가장 큰 요소는 "<<largest<<"이고, 인덱스 "<<pos<<"에 위치합니다";

정리

이 알고리즘은 배열을 딱 한 번만 순회하므로 시간 복잡도는 O(n)이며, 추가로 사용하는 변수가 상수 개수뿐이므로 공간 복잡도는 O(1)입니다. 즉, 배열의 크기가 커져도 선형 시간 안에 효율적으로 최댓값을 찾을 수 있는 가장 기본적이면서도 널리 쓰이는 방법입니다.