백준 산책 경로

KIMYEONGJUN·2026년 4월 20일
post-thumbnail

문제

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

첫째 줄에 선분의 개수 N (1 < N ≤ 30)이 주어진다.
다음 N개 줄에는 각 선분을 나타내는 두 정수 X와 Y가 주어진다. (-1000 ≤ X, Y ≤ 1000)

첫째 줄에 입력으로 주어진 산책 경로를 그대로 사용했을 때, 산책을 마치는 위치를 출력한다. (시작한 위치의 좌표를 (0,0)이라고 한다)
둘째 줄에는 선분을 하나 제거했을 때, 산책을 마치는 위치와 시작한 위치 사이 거리의 최솟값을 반올림해 소수점 둘째 자리까지 출력한다.

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

먼저 입력으로 N개의 선분 개수를 받고, 각 선분의 (x, y) 좌표를 배열에 저장한다.
totalX와 totalY에 모든 선분의 x, y값을 합산하여 전체 경로의 끝 좌표를 구한다.
전체 합계를 출력하여 시작점 (0,0)에서 네비게이션의 최종 위치를 확인한다..
이후 한 선분씩 제거하며, 제거된 경우의 최종 위치는 totalX - x[i], totalY - y[i]로 계산한다.
그 위치와 원점 (0,0) 사이의 거리를 구해 최소 거리를 추적한다.
최소 거리 값을 소수점 둘째 자리까지 포맷해 출력한다.
이렇게 하면 문제에서 요구하는 두 값을 정확히 구할 수 있다.

코드로 구현

package baekjoon.baekjoon_34;

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

// 백준 3097번 문제
public class Main1366 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] x = new int[N];
        int[] y = new int[N];

        // 전체 경로 합 저장용
        int totalX = 0;
        int totalY = 0;

        for (int i = 0; i < N; i++) {
            String[] split = br.readLine().split(" ");
            x[i] = Integer.parseInt(split[0]);
            y[i] = Integer.parseInt(split[1]);
            totalX += x[i];
            totalY += y[i];
        }

        // 전체 경로 최종 위치 출력
        System.out.println(totalX + " " + totalY);

        double minDistance = Double.MAX_VALUE;
        // 선분 하나 빼고 거리 계산
        for (int i = 0; i < N; i++) {
            int newX = totalX - x[i];
            int newY = totalY - y[i];
            double dist = Math.sqrt(newX * newX + newY * newY);
            if (dist < minDistance) {
                minDistance = dist;
            }
        }

        // 소수점 둘째 자리까지 출력
        System.out.printf("%.2f\n", minDistance);
        br.close();
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글