본문 바로가기
ETC./Algorithm

[백준] - 1002번: 터렛 (C언어)

by pjh5365 2023. 1. 17.

문제 : https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net


평면에서 두 원의 중심거리 공식을 사용하면 간단하게 구할 수 있음.

원이 두 점에서 만나는 경우에는 2, 외접or내접 하는 경우에는 1 두 원이 같을 때는 -1 나머지 경우는 0으로 출력

https://terms.naver.com/entry.naver?docId=3405330&cid=47324&categoryId=47324 

 

중심거리

평면에서 두 원의 중심 사이의 거리를 중심거리라고 한다. 다음 그림에서 중심이 각각 \rm O_1과 \rm O_2인 두 원의 중심거리는 선분 \rm O_1O_2의 길이인 d이다. 두 원의 반지름의 길이와 중심거리를

terms.naver.com


C언어 소스코드

#include <stdio.h>
#include <math.h>

int main() {
    int N, i;
    int x1, y1, r1, x2, y2, r2;
    double distance;
    int sub;
    scanf("%d", &N);

    for(i = 0; i < N; i++) {
        scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
        distance = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

        if(r1 > r2)
            sub = r1 - r2;
        else
            sub = r2 - r1;
        
        if(distance == 0 && r1 == r2)   //두 원이 같을 경우
            printf("-1 \n");
        else if(distance == r1+r2 || sub == distance)   //두 원이 내접 or 외접
            printf("1 \n");
        else if(distance > sub && distance < r1 + r2)   //두 원이 두점에서 만남
            printf("2 \n");
        else    //나머지
            printf("0 \n");
    }
}

 


 

'ETC. > Algorithm' 카테고리의 다른 글

[백준] - 2981번: 검문 (C++)  (0) 2023.02.06
[백준] - 2477번: 참외밭 (C언어)  (0) 2023.01.16