BAEKJOON-1002
수정하기
문서 생성 2021-09-15 14:13:06 최근 수정 2021-09-15 14:13:06
문제
풀이
- 주어진 좌표를 그려보면 원이 두개 그려짐을 알 수 있다.
- 류재명이 있을 수 있는 좌표는 조규현의 원과 백승환의 원을 이루는 점이 겹치는 부분이다.
- 결과를 만들기 위해 따져봐야 하는 경우는 총 4가지이다.
- 두 점에서 만나는 경우 (두 원이 겹치는 경우)
- 한 점에서 만나는 경우 (내접, 외접)
- 원이 일치하는 경우
- 동심원
- 두 원의 중심이 같고 반지름이 다른 경우
- 원이 만나지 않는 경우
두 점에서 만나는 경우
두 점에서 원이 만나면 서로 겹친다는 이야기다. 두 원이 서로 겹치려면 작은 원의 반지름보다 가까운 거리에서 만나야 한다. 그래서 두 원의 반지름을 더한 값이 원 사이 중심거리보다 커야 하고, 큰 원의 반지름에서 작은 원의 반지름을 뺀 값이 중심거리보다 작야아 한다.
r + r' > d && r' - r < d
한 점에서 만나는 경우
외접
r + r' = d
내접
r' - r = d
동심원
두 원의 중심이 같은 경우, 중심거리가 0이다.
d = 0
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');for(let i=1; i < input.length; i++) {let [x1, y1, r1, x2, y2, r2] = input[i].split(' ');x1 = Number(x1);y1 = Number(y1);r1 = Number(r1);x2 = Number(x2);y2 = Number(y2);r2 = Number(r2);// 두 원의 중심거리let d = Math.sqrt((x2-x1)**2 + (y2-y1)**2);if(d === 0) {if (r1 === r2) // 원이 일치하는 경우console.log(-1);elseconsole.log(0); // 동심원} else {// 내접 or 외접 하는 경우if(Math.abs(r2-r1) === d || r2 + r1 === d) {console.log(1);} else if (d > Math.abs(r2-r1) && d < r1+r2) { // 두 점에서 만나는 경우console.log(2);} else { // 만나지 않는 경우console.log(0);}}}