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
두 원의 위치관계, 내접, 외접
위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정신 바짝 차리고 따라오세요. 원과 직선의 위치관계, 원의 할선과 접선, 접점에서 했던 것처럼 두 원이 어떤 관계가 있는지 그때..
mathbang.net
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 |