[백준1002_자바스크립트(javascript)] - 터렛

경이·2025년 7월 4일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
310/325

🔴 문제

터렛


🟡 Sol

const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const [[_], ...inputs] = fs
  .readFileSync(path)
  .toString()
  .trim()
  .split('\n')
  .map((it) => it.split(' ').map(Number));

for (const [x1, y1, r1, x2, y2, r2] of inputs) {
  const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
  const rSum = r1 + r2;
  const rDiff = Math.abs(r1 - r2);

  if (x1 === x2 && y1 === y2 && r1 === r2) console.log(-1); // 무한대
  else if (distance > rSum) console.log(0); // 만나지 않음
  else if (distance < rDiff) console.log(0);
  else if (Math.abs(distance - rSum) < 1e-6 || Math.abs(distance - rDiff) < 1e-6) console.log(1);
  else console.log(2); // 두 점에서 만남
}

🟢 풀이

⏰ 소요한 시간 : -

입력은 여러개의 테스트 케이스로 이루어져 있는데, 하나의 테스트 케이스는 두 좌표와 좌표에서 목표물까지의 거리 r이 주어진다.

두 좌표값을 원의 중심이라고 생각하고 목표물까지의 거리를 반지름이라고 계산하면 이 문제는 두 원의 위치관계로 풀이할 수 있다.

두 좌표값의 거리와 반지름의 합을 구해서 두 원이 만나지 않는지, 혹은 두 점에서 만나는지, 외접/내접하는지를 구해서 조건에 맞게 정답을 출력한다.


🔵 Ref

profile
록타르오가르

0개의 댓글