[백준 6502] 동혁 피자 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
반지름 r인 원형 식탁과 가로 w, 세로 l인 직사각형 피자가 주어질 때, 피자가 식탁 위에 완전히 올라갈 수 있는지 판정하는 문제입니다.
접근법
직사각형이 원 안에 완전히 들어가려면 직사각형의 외접원이 원 안에 포함되어야 합니다. 직사각형의 외접원 반지름은 대각선 길이의 절반입니다.
다음으로, 대각선 길이를 구하면 루트(w 제곱 + l 제곱)이고, 이 값의 절반이 식탁 반지름 r 이하인지 확인합니다. 제곱근 계산을 피하기 위해 양변을 제곱하여 w 제곱 + l 제곱이 4 곱하기 r 제곱 이하인지 비교합니다.
이후, 조건을 만족하면 피자가 식탁에 올라간다는 메시지를, 그렇지 않으면 올라가지 않는다는 메시지를 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
class Program {
static void Main() {
var idx = 1;
while (true) {
var parts = Console.ReadLine()!.Split();
var r = double.Parse(parts[0]);
if (r == 0) break;
var w = double.Parse(parts[1]);
var l = double.Parse(parts[2]);
var diag2 = w * w + l * l;
var limit = 4.0 * r * r;
var ok = diag2 <= limit + 1e-9;
if (ok) Console.WriteLine($"Pizza {idx} fits on the table.");
else Console.WriteLine($"Pizza {idx} does not fit on the table.");
idx++;
}
}
}
C++
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int idx = 1;
while (true) {
double r;
if (!(cin >> r)) break;
if (r == 0) break;
double w, l; cin >> w >> l;
double diag2 = w * w + l * l;
double limit = 4.0 * r * r;
bool ok = diag2 <= limit + 1e-9;
if (ok) cout << "Pizza " << idx << " fits on the table.\n";
else cout << "Pizza " << idx << " does not fit on the table.\n";
idx++;
}
return 0;
}