728x90
Code
😢 여러가지 고려해야할 경우를 찾아내는 것이 힘들었다.
😊
1. 원이 두 점에서 만나는 경우 (2)( r2 - r1 < d < r1 + r2)
2. 두 원이 외접하는 경우 (1)( d === r1 + r2 )
3. 두 원이 내접하는 경우 (1)( d === r2 - r1 && d !== 0 )
4. 한 원이 다른 원을 포함하는 경우 (0)( d < r2 - r1 )
5. 두 원이 떨어져 만나지 않는 경우 (0)( d > r1 + r2 )
6. 두 원이 일치하는 경우 (-1)( d === 0, r1 === r2 )
중점 사이의 거리를 구하고, 위 6가지 경우만 조건문으로 분류해주면 된다.
참고 자료 https://mathbang.net/101
Full Code (https://github.com/DasolPark/Dasol_JS_Algorithm/tree/master/Baekjoon)
// Turret |
// For submit |
// const fs = require('fs'); |
// const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); |
// For local test |
const input = ['3', '0 0 13 40 0 37', '0 0 3 0 7 4', '1 1 1 1 1 5']; |
const T = parseInt(input.shift()); |
for (let i = 0; i < T; i++) { |
const xyrxyr = input[i].split(' ').map(num => parseInt(num)); |
const x1 = xyrxyr.shift(); |
const y1 = xyrxyr.shift(); |
let r1 = xyrxyr.shift(); |
const x2 = xyrxyr.shift(); |
const y2 = xyrxyr.shift(); |
let r2 = xyrxyr.shift(); |
const dx = x1 - x2; |
const dy = y1 - y2; |
if (r1 > r2) { |
// r1 <= r2로 정의 |
const temp = r1; |
r1 = r2; |
r2 = temp; |
} |
const rSum = (r1 + r2) * (r1 + r2); |
const rSub = (r2 - r1) * (r2 - r1); |
const d = dx * dx + dy * dy; // 중점 사이의 거리 |
// 1. 원이 두 점에서 만나는 경우 (두 점)(r2 - r1 < d < r1 + r2) |
if (d < rSum && d > rSub) { |
console.log(2); |
// 2. 두 원이 외접하는 경우 (한 점)( d = r1 + r2) |
// 3. 두 원이 내접하는 경우 (한 점)( d = r2 - r1 && d != 0) |
} else if (d === rSum || (d === rSub && d !== 0)) { |
console.log(1); |
// 4. 하나의 원이 다른 원을 포함하는 경우 (못 만남)( d < r2 - r1 ) |
// 5. 두 원이 멀리 떨어져 만나지 않는 경우 (못 만남)( d > r1 + r2 ) |
} else if (d < rSub || d > rSum) { |
console.log(0); |
// 6. 두 원이 일치하는 경우 (무수히)( d = 0, r1 = r2 ) |
} else if (d === 0) { |
if (r1 === r2) { |
console.log(-1); |
} else { |
console.log(0); |
} |
} |
} |
'Algorithm > JavaScript(Node.js)' 카테고리의 다른 글
백준 2750번: 수 정렬하기 Node.js(JavaScript) (0) | 2020.01.29 |
---|---|
백준 7568번: 덩치 Node.js(JavaScript) (0) | 2020.01.29 |
백준 3053번: 택시 기하학(유클리드 기하학) Node.js(JavaScript) (0) | 2020.01.28 |
백준 3009번: 네 번째 점(직사각형) Node.js(JavaScript) (0) | 2020.01.27 |
백준 4153번: 직각삼각형(피타고라스의 정리) Node.js(JavaScript) (0) | 2020.01.27 |