Post

[BOJ/백준] 25084번 : Infinity Area (Java)

📘 백준 25084번 : Infinity Area


문제 바로가기


💡 문제 풀이


boolean 변수로 다음 그릴 방향이 왼쪽인지 오른쪽인지 체크.

다음 방향이 왼쪽: 반지름 곱하기 A.

다음 방향이 오른쪽: 반지름 나누기 B.

R * R만 합하고 마지막에 pi를 곱하여 총 면적 계산.


✅ 코드 (Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// https://www.acmicpc.net/problem/25084
// boolean 변수로 다음 그릴 방향이 왼쪽인지 오른쪽인지 체크
// 다음 방향이 왼쪽: 반지름 곱하기 A
// 다음 방향이 오른쪽: 반지름 나누기 B
// R * R만 합하고 마지막에 pi를 곱하여 총 면적 계산
public class B25084_Infinity_Area {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine()); // 테스트 케이스
		for (int tc = 1; tc <= T; tc++) {
			sb.append("Case #").append(tc).append(": "); // 출력 형식
			StringTokenizer st = new StringTokenizer(br.readLine());
			long R = Long.parseLong(st.nextToken()); // 첫 번째 원의 반지름
			long A = Long.parseLong(st.nextToken()); // 왼쪽 원을 그릴 때 반지름에 곱할 값
			long B = Long.parseLong(st.nextToken()); // 오른쪽 원을 그릴 때 반지름을 나눌 값
			double area = 0; // 면적의 합 (반지름의 합)
			boolean nextIsright = false; // 다음이 오른쪽이면 true, 왼쪽이면 false;
			while (R > 0) { // 반지름이 0이 될 때까지
				area += R * R; // 면적의 합 구하기 (pi 제외)
				if (nextIsright) { // 다음 그릴게 오른쪽이면 반지름 나누기 B
					R /= B;
				} else { // 다음 그릴 게 왼쪽이면 반지름 곱하기 A
					R *= A;
				}
				nextIsright = !nextIsright; // 뱡향 바꿈

			}
			sb.append(String.format("%.6f\n", area * Math.PI)); // pi를 곱해서 총 면적을 출력 저장
		}
		System.out.println(sb); // 출력
		br.close();
	}
}


💾 제출 결과


보러 가기