728x90

최대(Max), 최소(Min), 최빈(Mode)

최대(Max)와 최소(Min)

  • 주어진 배열에서 최댓값최솟값을 찾는 알고리즘은 다음과 같다.
  • 만약 배열을 검색해서 max/min 보다 큰/작은 값이 없다면 처음에 가정으로 세운 max/min 값이 최댓값/최솟값이 된다.

 

최댓값 구하기

① 배열의 첫 번째 값을 최댓값(max)이라 가정한다.
② 배열을 검색해서 max 보다 큰 값(x)이 있으면 max 값을 x로 변경해준다. (max = x)
③ 결국 마지막엔 최댓값이 max 변수에 남게 된다.

 

최솟값 구하기

① 배열의 첫 번째 값을 최솟값(min)이라 가정한다.
② 배열을 검색해서 min보다 작은 값(y)이 있으면 min 값을 y로 변경해준다. (min = y)
③ 결국 마지막엔 최솟값이 min 변수에 남게 된다.

 

구현

#include <iostream>
using namespace std;

int main() {
    int a[5] = { 33, 67, 23, 87, 95 };
    int max, min;
    
    max = min = a[0];
    for (int i = 0; i < 5; i++) {
        if (max < a[i]) {
            max = a[i];
        }
        if (min > a[i]) {
            min = a[i];
        }
    }
    
    cout << "최댓값 : " << max << endl;
    cout << "최솟값 : " << min << endl;
    
    return 0;
}
더보기
최댓값 : 95
최솟값 : 23

 

최빈(Mode)

  • 주어진 배열에서 빈도수가 가장 많은 최빈값을 찾는 알고리즘은 다음과 같다.
① 주어진 배열(a)의 요소값을 바탕으로 새로운 배열(b)을 생성한다. 새로운 배열의 내부는 0으로 채운다.
X 1 2 2 2 10
a[0] a[1] a[2] a[3] a[4] a[5]
X 0 0 0 0 0 0 0 0 0 0
b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] b[10]

② 다음의 알고리즘을 적용하여 배열 b의 내용을 채운다.
for (int i = 1; i <= 5; i++) {
    b[a[i]]++;
}​
X 1 3 0 0 0 0 0 0 0 1
b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] b[10]

③ 최빈값을 찾는 문제를 최댓값을 찾는 문제로 변경하였다.
→ 배열 b에서 최댓값을 찾으면 3이고, 이것은 최빈값의 개수를 의미하며, 이 최댓값의 인덱스(Index) 값은 2로, 이는 최빈값을 의미한다.

 

구현

#include <iostream>
using namespace std;

int main() {
    int a[6] = { 0, 1, 2, 2, 2, 10 }, b[11] = { 0 };
    int max = 0, mode;
    
    for (int i = 1; i <= 5; i++) {
        b[a[i]]++;
    }
    
    for (int i = 1; i <= 10; i++) {
        if (max < b[i]) {
            max = b[i];    // 최빈값의 개수
            mode = i;      // 최빈값
        }
    }
    
    cout << "최빈값 : " << mode << endl;
    cout << "최빈값의 개수 : " << max << endl;
    
    return 0;
}
더보기
최빈값 : 2
최빈값의 개수 : 3

 

728x90