BOJ 문제풀이

백준 1002번 C 언어 풀이

koreasunoo 2021. 7. 8. 23:54
SMALL

안녕하세요 오늘은 원의 방정식의 성질을 이용한 문제를 풀어보겠습니다.

코드:

#include <stdio.h>
#include <cmath>
int main(){
    int a;
    scanf("%d",&a);
    for(int i =0; i<a; i++){
        int x1, x2, r1, y1, y2, r2;
        scanf("%d %d %d %d %d %d",&x1,&y1,&r1,&x2,&y2,&r2);
        int d = pow(x1-x2,2) + pow(y1-y2,2);
        long long int r1pr2 = pow(r1+r2,2);
        int r1mr2 = pow(r1-r2, 2);
        if(x1==x2 && y1==y2 && r1 == r2){
            printf("-1\n");
        }
        else if(d<r1pr2 && d>r1mr2){
            printf("2\n");
        }
        else if(d == r1mr2 || d == r1pr2){
            printf("1\n");
        }
        else if(d<r1mr2 || d>r1pr2){
            printf("0\n");
        }
    }
    return 0;
}

코드설명:

출처: mathbang.net

위 그림과 같이 원의 교점 성질을 이용하여 풀었습니다.

코드에서 변수 d는 원의 교점 사이의 거리의 제곱이고 x1px2는 x1+x2의 제곱, x1mx2는 x1-x2의 제곱입니다.

주의해야할 점:

맨 처음에 있는 if문이 다른 if문 다음에 else if 형태로 오게되면 if문 조건들 사이의 포함 관계에 유의해야합니다.

LIST

'BOJ 문제풀이' 카테고리의 다른 글

백준 2438번 C언어 풀이  (0) 2021.07.09
백준 11022번 C언어 풀이  (0) 2021.07.09
백준 2775번 C언어 풀이  (0) 2021.07.08
백준 10171번 파이썬 풀이  (0) 2020.07.13
백준 10718번 파이썬 풀이  (0) 2020.07.13