피너클의 it공부방
백준 1002 터렛 (c++) : 피너클 본문
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
기하학문제다.
터렛의 좌표와 거리가 주어졌을때 류재명이 있을수 있는 위치의 개수를 출력해야한다.
이때 크게 3가지 경우가 있다.
1. 두 터렛이 만나지 않는 경우
2. 두 터렛이 한번만 만나는 경우
3. 두 터렛이 두번 만나는 경우
int test;
cin >> test;
while (test-- > 0) {
cin >> x_1 >> y_1 >> r_1 >> x_2 >> y_2 >> r_2;
double dist = sqrt(pow(x_1 - x_2, 2) + pow(y_1 - y_2, 2));
test를 입력받고 while문을 돌린다.
터렛의 좌표와 거리를 입력받고 각 터렛끼리의 거리를 dist에 저장한다.
if (dist == 0 && r_1 == r_2) cout << -1 << '\n';
만약 두 터렛의 좌표가 같고 (두 좌표의 거리가 0이고) 각 터렛의 류재명을 측정한 거리가 같다면 1을 출력한다.
else if (dist < r_1 + r_2) {
if (r_1 > r_2) swap(r_1, r_2);
if (r_2 > dist + r_1) cout << 0 << '\n';
else if (r_2 == dist + r_1) cout << 1 << '\n';
else cout << 2 << '\n';
}
만약 두 좌표의 거리보다 각 터렛이 류재명을 측정한 거리의 합이 크다면 기본적으로 맨위에서 3번째 상황인데
3가지 경우로 나뉜다.
1. r_2가 dist + r_1보다 큰경우
위와 같은 경우다. 두 터렛의 경계가 닿지 않는걸 볼수 있다. 이런 경우엔 0을 출력한다.
2. r_2가 dist + r_1와 같은 경우
위와 같은 경우다. 두 터렛의 경계가 1번 닿는걸 알수 있다. 이런 경우엔 1을 출력한다.
3. r_2가 dist + r_1와 작은 경우
위와 같은 경우다. 두 터렛의 경계가 2번 닿는걸 알수 있다. 이런 경우엔 2를 출력한다.
else if (dist == r_1 + r_2) cout << 1 << '\n';
else cout << 0 << '\n';
그후 dist가 r_1 + r_2와 같다면 맨 위의 2번째 상황이니 1을 출력하고
dist가 r_1 + r_2보다 작다면 맨 위의 1번째 상황이니 0을 출력한다.
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
double x_1, y_1, r_1, x_2, y_2, r_2;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int test;
cin >> test;
while (test-- > 0) {
cin >> x_1 >> y_1 >> r_1 >> x_2 >> y_2 >> r_2;
double dist = sqrt(pow(x_1 - x_2, 2) + pow(y_1 - y_2, 2));
if (dist == 0 && r_1 == r_2) cout << -1 << '\n';
else if (dist < r_1 + r_2) {
if (r_1 > r_2) swap(r_1, r_2);
if (r_2 > dist + r_1) cout << 0 << '\n';
else if (r_2 == dist + r_1) cout << 1 << '\n';
else cout << 2 << '\n';
}
else if (dist == r_1 + r_2) cout << 1 << '\n';
else cout << 0 << '\n';
}
}
전체코드다.
'백준' 카테고리의 다른 글
백준 25305 커트라인 (c++) : 피너클 (0) | 2022.08.18 |
---|---|
백준 1004 어린 왕자 (c++) : 피너클 (0) | 2022.08.18 |
백준 2083 럭비 클럽 (c++) : 피너클 (0) | 2022.08.17 |
백준 25421 조건에 맞는 정수의 개수 (c++) : 피너클 (0) | 2022.08.16 |
백준 1509 팰린드롬 분할 (c++) : 피너클 (0) | 2022.08.16 |