알고리즘 문제 중 배열 내 최댓값 or 최솟값을 찾는 경우가 많이 있습니다.
python의 경우 max(), min()을 이용하면 쉽게 찾을 수 있지만(속도가 느리다는 단점이...), c/c++의 경우 반복문을 통해 배열 값들을 비교하며 찾아야 합니다.
3가지 방법을 통해 배열 내 최댓값, 최솟값을 찾는 방법을 소개해드리겠습니다.
1. 최댓값/최솟값 변수=0
최댓값 변수의 초기값을 0으로 설정하고 배열의 값들을 반복문을 통해 비교하며 갱신합니다.
하지만 위 코드의 문제점은 배열 내 원소가 전부 음수인 경우 최댓값이 0으로 나오는 문제가 발생합니다. 배열 내 0이 없는데 최댓값이 0이 돼버리는 아이러니한 상황이 발생하는것이죠.
#include<iostream>
using namespace std;
int main() {
int arr[5] = {1, 3, 5, 2, 8};
int max = 0; //최댓값의 초기값을 0으로 설정
for(int i=0; i<5; i++)
{
if(arr[i] > max)
max=arr[i];
}
cout<<max;
return 0;
}
2. 최댓값/최솟값 변수=INT_MIN or INT_MAX
이를 해결하기 위해 최댓값의 초기값을 int 범위 내 가장 작은 값으로 설정하는 것입니다. 범위 내 설정 가능한 매우 작은 값을 초기값으로 설정하면 1번과 같은 문제가 생길 일이 없습니다.
INT_MIN // int형 범위의 최소값
INT_MAX // int형 범위의 최대값
이를 사용하기 위해 꼭 #include <climits> 헤더를 선언해야 합니다.
#include <iostream>
#include <climits>
using namespace std;
int main() {
int arr[5] = {1, 3, 5, 2, 8};
int max = INT_MIN; //최댓값의 초기값을 int 범위 내 가장 작은 값으로 설정
for(int i=0; i<5; i++)
{
if(arr[i] > max)
max=arr[i];
}
cout<<max;
return 0;
}
3. 최댓값/최솟값 변수=배열 첫번째 값
마지막 방법은 초기값 변수를 배열의 첫 번째 원소로 설정하는 것입니다. 처음부터 0이나 최대/최소값으로 초기화 할 필요 없이 배열을 모두 훑으며 정확하게 최대/최소값을 찾을 수 있습니다.
#include <iostream>
using namespace std;
int main() {
int arr[5] = {1, 3, 5, 2, 8};
int max = arr[0]; //최댓값의 초기값을 배열의 첫번째 값으로 설정
for(int i=0; i<5; i++)
{
if(arr[i] > max)
max=arr[i];
}
cout<<max;
return 0;
}