ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준(Baekjoon)알고리즘 <문제번호 1002>
    백준문제정리 2020. 3. 22. 13:27
    728x90
    반응형

    문제

    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컨테이너에 삽입한다. 마지막으로 표준 출력을 통해서 결과를 출력한다.

     

    코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #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);
    else
    result_set.push_back(0);
    }
    }
     
    for (int i = 0; i < try_number;i++)
    {
    cout << result_set[i] << endl;
    }
    cs
    반응형
Designed by Tistory.