프로그래밍 공부

BOJ/백준 15921 수찬은 마린보이야!! 본문

Problem Solving/Baekjoon Online Judge

BOJ/백준 15921 수찬은 마린보이야!!

khj1999 2021. 6. 29. 22:44

https://www.acmicpc.net/problem/15921

 

15921번: 수찬은 마린보이야!!

기댓값 E(X)의 정의는 ‘각 사건이 벌어졌을 때의 이득과 그 사건이 벌어질 확률을 곱한 것을 전체 사건에 대해 합한 값’이다. 다시 말해, 어떤 수 x가 수열에 등장할 확률 P(x) = (x의 등장 횟수) /

www.acmicpc.net

언어 : C++14

환경 : Visual Studio 2019

 

이 문제를 푸는 방법은 2가지가 있다

하나는 문제의 힌트를 사용해서 또는 평균값과 기댓값은 일반적으로 같다는 것을 이용하는 방법.

 

문제의 힌트를 사용해서 일일이 계산을 해주는 방법.

#include <iostream>
using namespace std;

struct Record { // 점수를 저장할 구조체
	double score = 0.0; // 점수
	double cnt = 0.0;   // 점수의 빈도
};

int main() {
	int n;
	double solve = 0.0, avg = 0.0;;
	cin >> n;
	Record *arr = new Record[n];
	for (int i = 0; i < n; i++) {
		bool check = true;
		double record; cin >> record;
		avg += record;
		for (int j = 0; j < n; j++) {
			if (arr[j].score == record) { // 같은 점수가 있으면
				arr[j].cnt++; check = false; break; // cnt++ 하고 break;
			}
		}
		if (check) { // 같은 점수가 아니면
			arr[i].score = record; arr[i].cnt++; 값을 넣어주고 cnt++
		}
	}
	for (int i = 0; i < n; i++) {
		solve += arr[i].score * arr[i].cnt / n;
	}
	if (n == 0 || solve == 0) { // n또는 score의 합이 0이면
		cout << "divide by zero";
		return 0;
	}
	avg /= n;
	cout << fixed;
	cout.precision(2);
	cout <<  (double)avg / solve;
	return 0;
}

평균값과 기댓값은 일반적으로 같다는 것을 이용하는 방법.

#include<iostream>
using namespace std;
int main() {
	int n, sum = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int a; cin >> a; sum += a;
	}
        if (n == 0 || sum == 0){
        	cout << "divide by zero";
       		return 0;
        }
	cout << "1.00";
 	return 0;
}

이 방법은 n 또는 sum이 0이면 "divide by zero"를 출력하고 아니면 "1.00"을 출력해주면 된다

 

결과

일부러 힌트를줘서 귀찮게 만드는 문제인 거 같았다.

난 아무생각없이 문제 힌트를 이용해서 처음 방법으로 풀다가 일반적으로 평균값 / 기댓값 이면 1인걸 떠올렸다.

사실 위에것도 구조체 만들고 반복문 만들 필요 없이 입력받을 때 solve += arr[i].score * 1 / n; 해서 계산하면 풀린다.

'Problem Solving > Baekjoon Online Judge' 카테고리의 다른 글

BOJ/백준 7568 덩치  (0) 2021.07.21
BOJ/백준 13459 숨바꼭질 3  (0) 2021.07.05
BOJ/백준 1654 랜선 자르기  (0) 2021.06.29
BOJ/백준 4153 직각삼각형  (0) 2021.06.29
BOJ/백준 1547번 공  (0) 2021.06.28
Comments