www.acmicpc.net/problem/11930 문제링크다.
11930번: Smallest Enclosing Sphere
첫째 줄에는 하나의 양의 정수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐 각 점의 좌표를 나타내는 3개의 정수 x, y, z가 주어진다. x, y, z는 -1,000,000보다 크거나 같고 1,000,000보다
www.acmicpc.net
밑에는 비슷한 문제들이다.
2626번: 헬기착륙장
문제를 간단히 하기 위해서 섬의 크기는 무시하고, 섬의 위치를 2차원 정수 좌표로 표시한다. 첫 줄은 섬의 개수를 나타내는 정수 N(2≤N≤1,000)이다. 그 다음 N개의 줄은 각 줄마다 섬의 x 좌표값,
www.acmicpc.net
13708번: 모든 점을 포함하는 원
첫째 줄에 점 N (2 ≤ N ≤ 300)이 주어진다. 둘째 줄부터 N개의 줄에 점의 좌표 x, y가 주어진다. (0 ≤ x, y ≤ 1,000)
www.acmicpc.net
2389번: 세상의 중심에서...
첫째 줄에 N(1≤N≤100)이 주어진다. 다음 N개의 줄에는 x, y 좌표가 주어진다. 각각의 좌표는 소수점 여섯째자리까지 주어지며, -600,000 ≤ x, y ≤ 600,000을 만족한다.
www.acmicpc.net
저 문제하나 풀줄알면 밑에 세개는 꽁으로 경험치 먹을 수 있다.
뭐, 보통은 저기 3개중에 하나로 입문하겠지만. 나도 2389번으로 입문했고.
2389번 포스팅 https://ssuallassualla.tistory.com/155
2389랑 다를게 없다. z생긴거랑, 출력바뀐거 빼면.
2389는 볼록껍질을 사용해서 조금 시간을 줄였는데, c++에서 볼록껍질 해본적도 없고, 만들기 귀찮아서 그냥 했다.
#include <cstdio>
#include <math.h>
#include <utility>
#define ROUNDING(x, dig) ( floor((x) * pow(float(10), dig) + 0.5f) / pow(float(10), dig) )
int n;
double dots[1001][3];
double getDistanceDoubled(double p1[], double p2[]) {
return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1]) + (p1[2]-p2[2])*(p1[2]-p2[2]);
}
int main(){
scanf("%d",&n);
double x, y, z;
for(int i=0;i<n;i++){
scanf("%lf %lf %lf", &x, &y, &z);
dots[i][0] = x;
dots[i][1] = y;
dots[i][2] = z;
}
x = 0;
y = 0;
z = 0;
for(int i=0;i<n;i++){
x += dots[i][0];
y += dots[i][1];
z += dots[i][2];
}
x /= (double)n;
y /= (double)n;
z /= (double)n;
double ratio = 0.1;
double maxVal, tmp;
for(int i = 0; i < 20000; i++) {
double point[3] = {x,y,z};
maxVal = 0;
int maxIn = 0;
for(int j = 0; j < n; j++) {
tmp = getDistanceDoubled(point, dots[j]);
if(tmp > maxVal) {
maxVal = tmp;
maxIn = j;
}
}
x += (dots[maxIn][0] - x)*ratio;
y += (dots[maxIn][1] - y)*ratio;
z += (dots[maxIn][2] - z)*ratio;
ratio *= 0.995;
}
printf("%.2lf", ROUNDING(sqrt(maxVal),2));
}
밑에 틀린 것은, ratio *= 0.995 말고 0.999를 해서 틀렸다. 매개변수 적당히 잘 찍는 것도 중요한 것 같다.
'알고리즘 > BOJ' 카테고리의 다른 글
13705-Ax+Bsin(x)=C (0) | 2020.12.25 |
---|---|
[Python]7420-맹독 방벽 (0) | 2020.09.25 |
[Python]10254-고속도로 (2) | 2020.09.12 |
[Python]4181-Convex Hull (0) | 2020.09.12 |
[Python]2389-세상의 중심에서... (0) | 2020.09.12 |
[Python]16489-삼각형 해커 (0) | 2020.09.10 |
[Python]1194-달이 차오른다, 가자. (0) | 2020.08.10 |
[Python&C++]7868-해밍 수열 (0) | 2020.07.11 |