백준 Total Circle

KIMYEONGJUN·2026년 4월 27일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 줄에 N과 M이 주어진다. (1 ≤ N, M ≤ 1000)
N개의 줄에 걸쳐 x와 y가 주어지며, 이는 Pi = (x,y)라는 뜻이다. (-10^6 ≤ x,y ≤ 10^6)
M개의 줄에 걸쳐 x와 y가 주어지며, 이는 Qi = (x,y)라는 뜻이다. (-10^6 ≤ x,y ≤ 10^6)

Q 배열 상의 한 점을 중심으로, P 배열 상 모든 점을 포함하는 최소 넓이의 원의 반지름 중 최댓값의 제곱을 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader와 StringTokenizer로 입력 받는다.
P, Q 각각 점의 좌표를 2차원 배열에 저장한다.
maxRadiusSquared를 long 타입으로 선언한 이유는 좌표 범위가 최대 10^6 까지이고, 거리 제곱은 약 (2×10^6)^2 = 4×10^{12} 같은 큰 값이 나올 수 있기 때문이다.
각 Q 점을 중심으로 P 점 모든 좌표와의 거리의 제곱을 구하고 가장 큰 값을 찾다.
이 최대 거리 제곱값이 Q 중 하나에서 나온 것 중에서 더 큰 값을 저장한다.
마지막으로 그 값을 출력한다.
이 방식은 단순하지만 문제에서 요구하는 모든 조건에 부합하고 효율적으로 작동한다.

코드로 구현

package baekjoon.baekjoon_34;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 백준 17093번 문제
public class Main1372 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[][] P = new int[N][2];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            P[i][0] = Integer.parseInt(st.nextToken());
            P[i][1] = Integer.parseInt(st.nextToken());
        }

        int[][] Q = new int[M][2];
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            Q[i][0] = Integer.parseInt(st.nextToken());
            Q[i][1] = Integer.parseInt(st.nextToken());
        }

        long maxRadiusSquared = 0;

        for (int i = 0; i < M; i++) {
            long maxDistSquared = 0;
            for (int j = 0; j < N; j++) {
                long dx = Q[i][0] - P[j][0];
                long dy = Q[i][1] - P[j][1];
                long distSquared = dx * dx + dy * dy;
                if (distSquared > maxDistSquared) {
                    maxDistSquared = distSquared;
                }
            }
            if (maxDistSquared > maxRadiusSquared) {
                maxRadiusSquared = maxDistSquared;
            }
        }

        System.out.println(maxRadiusSquared);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글