[BOJ_step_09] 수학2 06 ~ 10
수학2
수학을 다루는 문제들을 해결해 보자.
직사각형에서 탈출(1085)
문제풀이
직사각형의 내부의 한 점에서 가장 가까운 모서리를 찾는 문제이다.
void solution_1085() {
int x,y,w,h;
scanf("%d%d%d%d", &x, &y, &w, &h);
printf("%d\n", (w - x < x ? w - x : x) < (h - y < y ? h - y : y) ? (w - x < x ? w - x : x) : (h - y < y ? h - y : y));
/*int a = w - x < x ? w - x: x;
int b = h - y < y ? h - y: y;
int c = a < b ? a : b;
printf("%d\n", c);*/
}
네 번째 점(3009)
문제풀이
세 점 (a,b), (a,d), (c,b) 가 있을 때 정렬을 하면 (사전식 순서) (a,b),(a,d),(c,b)
가 된다. 이 때 첫 번째 좌표와 두 번째 좌표를 비교했을 때 같으면 2번 나왔으므로 세 번째 좌표를 출력하고 그렇지 않다면 두 번째 좌표를 출력한다. 이를 x와 y에 대해 따로 생각해준다.
void solution_3009() {
int x[4], y[4];
for (int i = 0; i < 3; ++i)
scanf("%d %d", &x[i], &y[i]);
sort(x, x + 3);
sort(y, y + 3);
printf("%d %d", x[0] == x[1] ? x[2] : x[0], y[0] == y[1] ? y[2] : y[0]);
}
직각삼각형(4153)
문제풀이
피타고라서 정리를 이용하여 직각삼각형인지 아닌지 판별하는 문제.
void solution_4153() {
while (1) {
int a[3], tmp;
for (int i = 0; i < 3; i++)scanf("%d", &a[i]);
if (a[0] == 0 || a[1] == 0 || a[2] == 0)break;
if (a[2] * a[2] == a[1] * a[1] + a[0] * a[0])printf("right\n");
else printf("wrong\n");
}
}
택시 기하학(3053)
문제풀이
택시기하학에 대한 정리는 다음을 참고하자.
택시기하학
const double PI = 3.14159265358979;
void solution_3053() {
int r;
scanf("%d", &r);
printf("%6f\n", r*r*PI);
printf("%6f\n", (double)r*r * 2);
}
터렛(1002)
문제풀이
처음에 거리라는 말에 위에서 풀었던 택시기하학
을 이용하면 되겠다 싶어서 풀었는데 틀렸다. 아마 문제에서 주어지는 터렛과 적의 거리 자체가 유클리드 기하학
에 기반하여 정의되어서 인 것 같다.
문제 해석을 잘 해보면 결국 문제에서 원하는 것은
- 두 원이 일치하는가?
- 두 원의 교점이 없는가?
- 두 원의 교점이 2개인가?
- 두 원의 교점이 1개인가? (외접하는가 내접하는가?)
이다.
void solution_1002() {
int t;
scanf("%d", &t);
while (t--) {
int x1, y1, d1, x2, y2, d2;
scanf("%d%d%d", &x1, &y1, &d1);
scanf("%d%d%d", &x2, &y2, &d2);
int d = (x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1);
int sum = (d1 + d2)*(d1 + d2); //두 거리의 합
int dif = (d1 - d2)*(d1 - d2); //두 거리의 차
//두 원의 중심이 일치할 때
if (d == 0) {
if (dif == 0) printf("-1\n"); //두 원이 일치할 때
else printf("0\n"); //두 원이 일치하지 않을 때
}
else if (d == sum || d == dif)printf("1\n"); //외접할 때, 내접할 때
else if (dif < d&&d < sum) printf("2\n"); //두 점에서 만날 때
else printf("0\n"); //만나지 않을 때
}
}
댓글남기기