1. 문제 링크 https://www.acmicpc.net/problem/1002
2. 문제
3. 문제 요약
O1 := (x1, y1)을 중심으로 반지름이 r1인 원
O2 := (x2, y2)을 중심으로 반지름이 r2인 원
이 때, O1과 O2의 가능한 교점의 수 구하기
4. 문제 풀이
두 원의 교점이 있는지와 관련한 문제이다.
두 원이 접하는 지에 대해서 가능한 경우를 생각해보면, 총 6가지 경우를 생각해보면 된다.
(1)교점이 무수히 많은 경우
(2)교점이 2개 생기는 경우
(3)교점이 1개 생기는 경우
(3-1) 교점이 외접하는 경우
(3-2) 교점이 내접하는 경우
(4)교점이 없는 경우
(4-1) 두 원이 겹치지 않는 경우
(4-2) 두 원이 겹치는 경우
이 문제의 특징으로는, 교점들의 정확한 좌표를 구하는 것이 아니기 때문에
거리를 비교하는 과정에서, 제곱값을 그대로 활용한다는 점이 특징이라 할 수 있다.
5. 문제 코드 ( Java )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public int boj1002() throws Exception {
StringTokenizer str = new StringTokenizer(bfr.readLine());
int x1 = Integer.parseInt(str.nextToken());
int y1 = Integer.parseInt(str.nextToken());
int r1 = Integer.parseInt(str.nextToken());
int x2 = Integer.parseInt(str.nextToken());
int y2 = Integer.parseInt(str.nextToken());
int r2 = Integer.parseInt(str.nextToken());
int d = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
int sum = (r1+r2) * (r1+r2);
int dif = (r1-r2) * (r1-r2);
if( d >= sum ) return d>sum ? 0 : 1;
if( d == dif ) return d==0 ? -1 : 1;
else return d < dif ? 0 : 2;
}
Colored by Color Scripter
|
'백준 > 백준' 카테고리의 다른 글
[ 백준 1978 ] 소수 찾기 (0) | 2019.11.03 |
---|---|
[ 백준 9465 ] 스티커 (0) | 2019.11.02 |
[백준 1780] 종이의 개수 (0) | 2019.02.09 |
[백준 1992] 쿼드트리 (0) | 2019.02.08 |
[백준 2167 ] 2차원 배열의 합 (0) | 2019.02.07 |