
내가 생각했을때 문제에서 원하는부분
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있고, 실수 x1, y1, x2, y2, x3, y3이 주어진다.
세 점으로 만들 수 있는 원의 지름은 백만을 넘지 않는다.
각 테스트 케이스마다 입력으로 주어진 원의 원주를 소수점 둘째 짜리까지 반올림해 출력한다.
파이의 근사값은 3.141592653589793이다.
내가 이 문제를 보고 생각해본 부분
BufferedReader와 StringTokenizer를 사용하여 여러 줄에 걸친 입력을 라인 단위로 읽어온다.
세 점의 좌표를 각각 실수형으로 파싱한다.
각 점 간의 거리를 계산하는 distance 함수를 정의하여 세 변 a,b,c를 계산한다.
헤론의 공식으로 삼각형의 넓이 S를 구한다.
세 점을 지나는 원의 반지름 r를 공식을 사용해 계산한다.
2πr을 계산하여 원주의 길이를 구하고, 소수점 둘째 자리까지 출력한다.
주어진 파이 값은 3.141592653589793을 상수로 지정해 사용한다.
반복문을 통해 모든 테스트 케이스에 대해 결과를 출력한다.
코드로 구현
package baekjoon.baekjoon_34;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준 6600번 문제
public class Main1371 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
final double PI = 3.141592653589793;
while ((line = br.readLine()) != null && !line.isEmpty()) {
StringTokenizer st = new StringTokenizer(line);
double x1 = Double.parseDouble(st.nextToken());
double y1 = Double.parseDouble(st.nextToken());
double x2 = Double.parseDouble(st.nextToken());
double y2 = Double.parseDouble(st.nextToken());
double x3 = Double.parseDouble(st.nextToken());
double y3 = Double.parseDouble(st.nextToken());
// 각 변 길이 계산
double a = distance(x2, y2, x3, y3);
double b = distance(x1, y1, x3, y3);
double c = distance(x1, y1, x2, y2);
// 헤론의 공식
double s = (a + b + c) / 2.0;
double area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
// 반지름 계산
double r = (a * b * c) / (4.0 * area);
// 원주 계산 및 출력 (소수점 둘째 자리까지 반올림)
double circumference = 2.0 * PI * r;
System.out.printf("%.2f\n", circumference);
}
br.close();
}
// 두 점 거리 구하는 함수
private static double distance(double x1, double y1, double x2, double y2) {
double dx = x1 - x2;
double dy = y1 - y2;
return Math.sqrt(dx * dx + dy * dy);
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.