본문 바로가기
[C, C++ 알고리즘]

[백준 1004] 어린 왕자

by BeNev0L 2021. 11. 10.

진입/이탈을 몇번하는지 구하는 문제다.

진입/이탈을 하는 것 --> 행성계 내부와 외부에 출발점과 도착점이 각각 하나씩 있을 때

쉽죠?

 

행성계의 중심과 출발/도착점 사이의 거리와 반지름의 길이를 비교하면 외부에 있는지 내부에 있는지 알 수 있다.

그러면 출발점과 도착점이 외부, 내부에 각각 하나씩 있을 때 진입/이탈 카운트를 올리면 된다.

 

<소스코드>

#include <iostream>

using namespace std;

int main()
{
    int test_num;   //Test case 개수
    cin >> test_num;
    while(test_num--){
        int x1, y1, x2, y2;
        int var = 0; //진입, 이탈 몇번
        cin >> x1 >> y1 >> x2 >> y2;

        int n;  //행성계 개수
        cin >> n;
        while(n--){
            int cx, cy, r, d;
            bool b1, b2;
            cin >> cx >> cy >> r;

            d = (x1 - cx) * (x1 - cx) + (y1 - cy) * (y1 - cy);
            b1 = d > r*r ? false : true;
            d = (x2 - cx) * (x2 - cx) + (y2 - cy) * (y2 - cy);
            b2 = d > r*r ? false : true;

            if(b1 != b2)
                var++;
        }

        cout << var << '\n';
    }

    return 0;
}

줄바꿈 안하면 틀린다.

끝.

'[C, C++ 알고리즘]' 카테고리의 다른 글

All pairs Shortest path Problem - Floyd Warshall Algorithm.  (0) 2021.12.10
[백준 1010] 다리 놓기  (0) 2021.11.26
[백준 1009] 분산처리  (0) 2021.11.15
[백준 1005] ACM CRAFT  (0) 2021.11.13
[백준 1002] 터렛  (0) 2021.11.08