728x90

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

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);
}
}
}

+ Recent posts