※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 28139번 문제인 평균 구하기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/28139
28139번: 평균 구하기
$2$차원 좌표평면 위에 $N$명의 사람이 있다. 위치가 ($x_1, y_1$)인 사람과 위치가 ($x_2, y_2$)인 사람 간의 거리는 $\sqrt{\left(x_1 - x_2 \right)^2 + \left(y_1 - y_2 \right)^ 2}$이다. 위대한 마법사 레이는 이 중 한
www.acmicpc.net
모든 방문방법의 경우의 수는 N!가지이고, 각 방문방법은 N-1개의 방향에지로 구성되어 있음을 관찰하자. 또한 모든 방문방법에 포함된 각 방향에지의 개수는 전부 같음을 관찰하자.
위의 관찰을 이용하면 (모든 방향에지의 길이의 합)을 (방향에지의 개수)/(N-1)로 나누어 문제에서 찾는 기댓값을 구할 수 있음을 알 수 있다. 여기서 사람 A에서 B로 향하는 것을 나타내는 방향에지와 B에서 A로 향하는 것을 나타내는 방향에지는 서로 다른 에지임에 유의해 계산하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <cmath>
using namespace std;
typedef long double ld;
ld ans;
int N;
int coord[5000][2];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) cin >> coord[i][0] >> coord[i][1];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int dx = (coord[i][0] - coord[j][0]), dy = (coord[i][1] - coord[j][1]);
ans += sqrt(dx * dx + dy * dy);
}
}
cout << fixed;
cout.precision(10);
cout << ans / N;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28141 // C++] Easy Interactive Problem (0) | 2023.10.27 |
---|---|
[BOJ 28140 // C++] 빨강~ 빨강~ 파랑! 파랑! 달콤한 솜사탕! (1) | 2023.10.26 |
[BOJ 28138 // C++] 재밌는 나머지 연산 (0) | 2023.10.24 |
[BOJ 12931 // C++] 두 배 더하기 (1) | 2023.10.23 |
[BOJ 1484 // C++] 다이어트 (1) | 2023.10.22 |