본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1004 어린 왕자

by 까망 하르방 2021. 2. 20.
반응형

출처: https://www.acmicpc.net/problem/1004

 Input 

2

-5 1 12 1

7

1 1 8

-3 -1 1

2 2 2

5 5 1

-4 5 1

12 1 1

12 1 2

-5 1 5 1

1

0 0 2

  

 Output 

3

0

문제조건에서 원의 경계가 맞닿거나 교차하는 경우는 주어지지 않습니다.

 

두 점의 상태는 아래의 경우로 나눌 수 있습니다.

① 두 개 모두 원 안에 있는 경우  +0

    : 원의 교차 없이 두 점을 이을 수 있습니다.

② 두 개 모두 원 밖에 있는 경우  +0

    : 원의 바깝 부분을 돌아가서 교차 없이 두 점을 이을 수 있습니다.

③ 둘 중 한 개만 원 안에 있는 경우  +1

    : 하나의 원을 교차할 수 밖에 없습니다.

 

[빨간색 점을 기준]

▶ d1 < r1 이므로, 원1에 포함되어 있다.

▶ d2 > r2 이므로, 원2에 포함되어 있지 않다.

 


#include <iostream>
 
int main() {
    int T;
    scanf("%d", &T);
 
    for (int i = 0; i < T; ++i) {
        int x1, y1, x2, y2;
        scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
 
        int n;
        scanf("%d", &n);
        int count = 0;
        for (int j = 0; j < n; ++j) {
            int cx, cy, r, d;
            bool in1, in2;
 
            scanf("%d %d %d", &cx, &cy, &r);
            d = (cx - x1) * (cx - x1) + (cy - y1) * (cy - y1);
            in1 = d > r * r ? false : true;
 
            d = (cx - x2) * (cx - x2) + (cy - y2) * (cy - y2);
            in2 = d > r * r ? false : true;
            // 둘 다 원안에 있는 경우
            if (in1 != in2) count++;
        }
        printf("%d\n", count);
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1914 하노이 탑  (0) 2021.02.20
[BOJ] 백준 1159 농구 경기  (0) 2021.02.20
[BOJ] 백준 2042 구간 합 구하기  (0) 2021.02.20
[BOJ] 백준 10989 수 정렬하기 3  (0) 2021.02.20
[BOJ] 백준 10868 최솟값  (0) 2021.02.20

댓글