본문 바로가기
백준 문제 풀이

[백준 1002] 터렛

by $# 2020. 3. 19.

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

 

 


해설

 

먼저, 문제가 깨끗하게 읽히진 않는다.

 

문제에서 좌표가 나오고 거리가 주어지니 우리는 고등학교 과정의 수학( 두 원의 위치 관계 )을 떠올려야 한다.

 

점과 점 사이의 거리 공식

3가지를 생각해보자.

 

i) 두 원이 두 점에서 만나는 경우

   두 반지름의 합이 두 점 사이의 거리의 합보다 크고, 두 반지름의 차가 두점 사이의 거리의 합보다 작아야 한다. (한 원이 다른 원 안에 있는 경우)

 

ii) 두 원이 한 점에서 만나는 경우

   두 반지름의 합이 두 점 사이의 거리의 합과 같거나 두 반지름의 차가 두 점 사이의 거리의 합과 같다. ( i)와 마찬가지로 한 원이 다른 원 안에 있을 수 있음.)

 

iii) 두 원이 만나지 않는 경우

    i), ii) 케이스의 나머지 케이스들이라고 생각하면 된다.

 

 

 

˙˙˙

 

소스코드

 

#include <iostream>
using namespace std;
int main() {
    int n;
    int x1,y1,r1,x2,y2,r2;
    cin >> n;
    for(int i=0; i<n; i++){
    	cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
    	int d = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1);
    	int r = (r1+r2)*(r1+r2);
    	int rr = (r1-r2)*(r1-r2);
    	if(d==0){
    		if(rr==0)
    			cout << "-1" << '\n';
    	else
    		cout <<"0"<<'\n';
   		}
		else if(d==r || d==rr)
    		cout << "1" << '\n';
    	else if(rr<d && d<r)
    		cout << "2" << '\n';
    	else
    		cout << "0" << '\n';
	}
}

 

문제 해설의 오류 지적 언제나 환영입니다.

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

[백준 1008] A/B  (0) 2020.03.19
[백준 1004] 어린 왕자  (3) 2020.03.19
[백준 1003] 피보나치 함수  (0) 2020.03.19
[백준 1001] A-B  (0) 2020.03.19
[백준 1000] A+B  (0) 2020.03.19

댓글