1004 - 어린왕자

LEE'S·2024년 10월 31일
0

백준

목록 보기
26/27

문제

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

풀이

나의 풀이

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split("\n");

const T = Number(input.shift());

function solution(x1, y1, x2, y2, n, planets) {
    let answer = 0 ;
    
    for (let [cx,cy,r] of planets) {
        let first = Math.sqrt(((x1-cx)**2)+ ((y1-cy)**2)) ; 
        let second = Math.sqrt(((x2-cx)**2)+ ((y2-cy)**2)) ;
        
        if (first <= r) answer ++
        if (second <= r) answer ++
        if (first <= r && second <= r) answer -= 2 ;
    }
    
    return answer ;
}

for (let i = 0; i < T; i++) {
  const [x1, y1, x2, y2] = input.shift().split(" ").map(Number);
  const n = Number(input.shift());
  const planets = [];
  for (let j = 0; j < n; j++) planets.push(input.shift().split(" ").map(Number));

  console.log(solution(x1, y1, x2, y2, n, planets)) ;
}

사실 처음에 어떻게 풀어야할지 몰라서 다른 풀이를 참고해서 작성했다.

출발점과 도착점이 각각 행성계 안에 있으면 answer에 1씩 증가시킨다.
단, 출발점과 도착점 둘다 하나의 행성계 안에 있으면 굳이 진입/이탈을 할 필요가 없으니 2를 빼준다

이 부분만 알면 사실 코드짜는건 쉬운데,, 여기까지 생각한게 어렵.....ㅠ

profile
기록 블로그

0개의 댓글