작성일 :

문제 링크

6502번 - 동혁 피자

설명

반지름 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;
}