백준 1004번 어린왕자

이상민·2023년 8월 31일
0

알고리즘

목록 보기
34/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Young_Prince {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int T = Integer.parseInt(st.nextToken());
        for (int i = 0; i < T; i++) {
            int count = 0;

            st = new StringTokenizer(br.readLine());
            int x1 = Integer.parseInt(st.nextToken());
            int y1 = Integer.parseInt(st.nextToken());
            int x2 = Integer.parseInt(st.nextToken());
            int y2 = Integer.parseInt(st.nextToken());
            st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            for (int j = 0; j < n; j++) {
                st = new StringTokenizer(br.readLine());
                boolean flag = false;
                int cx = Integer.parseInt(st.nextToken());
                int cy = Integer.parseInt(st.nextToken());
                int r = Integer.parseInt(st.nextToken());
                if(Math.abs((x1-cx)*(x1-cx))+Math.abs((y1-cy)*(y1-cy))<r*r){
                    count++;
                    flag = true;
                }
                if(Math.abs((x2-cx)*(x2-cx))+Math.abs((y2-cy)*(y2-cy))<r*r){
                    if(flag)
                        count--;
                    else {
                        count++;
                    }
                }
            }
            System.out.println(count);
        }




    }
}

풀이방법

📢이 풀이의 핵심은 내 좌표를 포함하는 원 + 목표 좌표를 포함하는 원을 구하는 것이다. (단, 내 좌표와 목표 좌표를 동시에 포함하는 것은 세지 않는다.)
동시 포함 처리를 생각해야 하는점에 주의 하자.

후기

문제는 장황하게 어렵게 설명해놨는데 사실 핵심이 너무 별게 아니어서 잘 파악하는것이 중요했다.
Math.sqrt() 루트 처리를 해주는 메소드이다.
풀이에서는 그냥 반지름을 제곱했다.
어린왕자라 1004번인가..?

profile
개린이

0개의 댓글