알고리즘문제 풀어보기/백준

백준 28139 - 평균구하기

rimugiri 2024. 11. 16. 03:02
728x90

 

해결과정 - 확률

a와 b로 이루어진 선분이 몇번 출현하는지 안다면 쉽게 풀수 있는 문제였다.

a,b를 제외한 나머지를 일렬로 배치하는 방법은 (n-2)! 이며 배치한 공간중 a,b가 들어갈 수 있는 공간은 n - 1개로 a, b선분은 총 (n - 1)!번 등장하게 된다.

따라서 각 점들끼리 의 거리를 한번씩 더해준뒤 출현횟수인 (n - 1)!을 곱한뒤 a,b b,a 양방향을 고려하여 2를 곱한뒤 총 개수 n!으로 나눈다면 답이되는 재미있는 문제였다

 

#include <bits/stdc++.h>

#define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
typedef long long ll;

using namespace std;

class Point {
public:
    int x, y;
    Point(int x, int y) : x(x), y(y) {};
    Point() : x(0), y(0) {};
};

double GetDistance(Point& a, Point& b) {
	return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
}

int main()
{
    FAST;
    int n; cin >> n;

    // 출현 위치 저장
	vector<Point> pos(n);

    for (int i = 0; i < n; i++) {
		cin >> pos[i].x >> pos[i].y;
    }

    double sum = 0;

    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            sum += GetDistance(pos[i], pos[j]);
        }
    }

    cout << fixed;
    cout.precision(9);
	cout << (sum * 2) / n << "\n";

    return 0;
}

 

후기

오랜만의 확률문제 재미있다.

컴퓨터 새거 샀는데 날아갈 듯한 기분이다 ㅎㅎㅎ.

728x90