백준 SILVER 3(터렛)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-01-26

  • 해결 방법 :

    • 입력으로 받은 두 좌표((x1, y1), (x2, y2))와 반지름(r1, r2)를 통해 두 원의 중심 거리와 반지름 차이의 절댓값을 구함
    • 두 원의 중심 거리와 반지름이 모두 같은 경우(동일한 원) 나올 수 있는 접점은 무한대이므로 -1 반환
    • 두 원의 중심 거리가 반지름의 합보다 작고, 차보다 큰 경우 두 접점에서 만나는 원이므로 2 반환
    • 두 원의 중심 거리가 반지름의 합과 같거나(외접원) 차와 같은 경우(내접원) 한 접점에서 만나는 원이므로 1 반환
    • 그 외의 경우 접점이 없으므로 0 반환
  • 회고 :

    • string 값인 prop number로 변환
    • input 받을 때 trim()
  • 코드

    const fs = require('fs');
    const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
    let input = fs.readFileSync(filePath).toString().trim();
    
    solution(input);
    
    function solution(props) {
      props = props.split('\n').slice(1);
    
      props.forEach((prop) => {
        const [x1, y1, r1, x2, y2, r2] = prop.split(' ').map((e) => +e);
    
        const distance = Math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2);
        const difference = Math.abs(r2 - r1);
    
        let result;
    
        if (distance === 0 && r1 === r2) {
          result = -1;
        } else if (distance < r1 + r2 && distance > difference) {
          result = 2;
        } else if (distance === r1 + r2 || distance === difference) {
          result = 1;
        } else {
          result = 0;
        }
    
        console.log(result);
      });
    }
    
  • 출처: 백준