문제 개요
크기가 n인 배열이 주어졌을 때, 특정 원소 k가 배열에 존재한다면 그 출현 확률을 구하는 것이 이번 글의 목표입니다.
배열의 첫 번째 원소부터 n번째 원소까지 전체를 순회하면서 키 k와 일치하는 값이 있는지 탐색합니다. 키가 배열 안에 존재하면 해당 확률을 계산해 출력하고, 존재하지 않는다면 0을 출력하면 됩니다.
입력 예시
arr[] = { 1, 2, 3, 4, 5, 6 }
K = 5출력 예시
배열에서 키 5의 확률 : 0.166
입력 예시 2
arr[] = { 1, 2, 3, 4, 5, 6, 7 }
K = 8출력 예시 2
배열에서 키 8의 확률 : 0
동작 원리 설명
예를 들어 크기가 7인 배열과 키 값 2가 주어졌다고 가정해 보겠습니다. 이 경우 배열을 총 7번 순회하면서 값이 2인 원소를 찾게 됩니다.
순회 도중 2를 발견할 때마다 임시 변수(카운터)의 값을 1씩 증가시키고, 다른 값이라면 카운터를 증가시키지 않은 채 다음 원소로 넘어갑니다. 순회가 끝난 후 결과는 다음과 같이 판단합니다.
카운터가 0이라면 키가 배열에 존재하지 않는다는 의미이므로 확률은 0입니다.
카운터가 0이 아닌 값을 가진다면 아래 공식으로 키 k의 확률을 계산합니다.
확률(k) = 키 k의 총 출현 횟수 ÷ 배열의 전체 원소 개수
키 K의 출현 횟수 = 4
배열의 전체 원소 개수 = 7
키(k)의 확률 = 4 / 7 = 0.57
알고리즘
Start
Step 1 → 배열에서 키의 확률을 계산하는 함수 선언
float probab_key(int arr[], int size, int key)
float count = 0 으로 초기화
Loop For int i = 0 and i < size and i++
IF arr[i] == key
count++
End
End
return count / size
Step 2 → main() 함수에서
int arr[] = { 1, 2, 3, 4, 5, 6 } 선언
int key = 5 선언
int size = sizeof(arr) / sizeof(arr[0]) 선언
probab_key(arr, size, key) 호출
StopC++ 구현 예제
#include <bits/stdc++.h>
using namespace std;
// 배열에서 키가 등장할 확률을 계산하는 함수
float probab_key(int arr[], int size, int key){
float count = 0;
for (int i = 0; i < size; i++){
if (arr[i] == key)
count++;
}
return count / size;
}
int main(){
int arr[] = { 1, 2, 3, 4, 5, 6 };
int key = 5;
int size = sizeof(arr) / sizeof(arr[0]);
cout << "배열에서 키 " << key << "의 확률 : " << probab_key(arr, size, key);
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
배열에서 키 5의 확률 : 0.166667
배열 { 1, 2, 3, 4, 5, 6 }에는 키 5가 한 번만 등장하고 전체 원소는 6개이므로, 확률은 1/6 ≈ 0.166667이 됩니다. 이처럼 단순한 선형 탐색과 카운터만으로도 배열 내 특정 값의 출현 확률을 손쉽게 계산할 수 있습니다.