-
백준(Baekjoon)알고리즘 <문제번호 1002>백준문제정리 2020. 3. 22. 13:27728x90반응형
문제
A과 B은 터렛에 근무하는 직원이다.
A와 B의 위치로부터 임의의 C의 위치를 파악하는 문제.
A와 B의 좌표가 주어지고 각각 탐지할 수 있는 거리 r1, r2가 주어질 때, C가 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.
출력
각 테스트 케이스마다 C가 있을 수 있는 위치의 수를 출력한다. 만약 C가 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
문제풀이
두 A,B의 좌표가 주어지고 각각 탐지할 수 있는 거리 r1, r2가 주어진다는 것. 터렛은 기본적으로 원 반경 안에 적을 탐지할 수 있기 때문에 두원이 만나는 조건을 따져서 조건문을 통해 예외를 처리한다. A와 B사이의 거리 distance를 구하고 조건에 따라서 만나는 점의 개수를 push.back() 함수를 통해서 vector컨테이너에 삽입한다. 마지막으로 표준 출력을 통해서 결과를 출력한다.
코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include <iostream>#include <math.h>#include <vector>using namespace std;int main(void){int try_number;int x1, y1, r1; //A의 좌표, 탐지할 수 있는 원의 반지름int x2, y2, r2; //B의 좌표, 탐지할 수 있는 원의 반지름int distance; //A와 B사이의 거리vector result_set;cin >> try_number;for (int i = 0; i < try_number; i++){while (true){cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;if (x1 <= 10000 && x1 >= -10000 && x2 <= 10000 && x2 >= -10000 && y1 <= 10000 &&y1 >= -10000 && y2 <= 10000 && y2 >= -10000){break;}}distance = pow(x1 - x2, 2) + pow(y1 - y2, 2);if (r2 > r1){swap(r1, r2);}if (distance > pow((r1 - r2), 2) && distance < pow((r1 + r2), 2)){result_set.push_back(2);}else if(distance == pow((r1 + r2), 2) || (distance == pow((r1 - r2), 2) && distance !=0)){result_set.push_back(1);}else if (distance < pow((r1 - r2), 2) || distance > pow((r1 + r2), 2)){result_set.push_back(0);}else if(distance == 0){if (r1 == r2)result_set.push_back(-1);elseresult_set.push_back(0);}}for (int i = 0; i < try_number;i++){cout << result_set[i] << endl;}}cs 반응형'백준문제정리' 카테고리의 다른 글
백준(Baekjoon)알고리즘 <문제번호 1009> - 분산처리 (0) 2020.04.07 백준(Baekjoon)알고리즘 <문제번호 1003> - 피보나치 (0) 2020.04.05 백준(Baekjoon)알고리즘 <문제번호 1004> - 어린왕자 (0) 2020.03.29 백준(Baekjoon)알고리즘 <문제번호 1001> (0) 2020.03.22 백준(Baekjoon)알고리즘 첫번째! <문제번호 1000> (0) 2020.03.22