작성일 :

문제 링크

10187번 - Golden

설명

입력으로 주어지는 두 수의 비율이 황금비(약 1.61803399)에 가까운지 판별하는 문제입니다.

문제의 조건에 따르면, 두 수의 비율이 황금비에 가깝다는 것은 그 비율이 황금비의 +-1% 범위 안에 있다는 것을 의미합니다.

따라서, 두 수를 나누어 그 비율을 계산하고, 그 비율이 황금비의 +-1% 범위 안에 있는지 확인합니다.


Code

[ 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
26
27
28
namespace Solution {
  class Program {

    static bool IsGoldenRatio(double a, double b) {
      var ratio = a / b;
      var goldenRatio = (1 + Math.Sqrt(5)) / 2;
      var tolerance = 0.01 * goldenRatio;

      return Math.Abs(ratio - goldenRatio) <= tolerance;
    }

    static void Main(string[] args) {

      var n = int.Parse(Console.ReadLine()!);

      for (int i = 0; i < n; i++) {
        var input = Console.ReadLine()!.Split(' ');
        var a = double.Parse(input[0]);
        var b = double.Parse(input[1]);

        if (IsGoldenRatio(a, b))
          Console.WriteLine("golden");
        else Console.WriteLine("not");
      }

    }
  }
}



[ 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
26
27
28
29
#include <bits/stdc++.h>

using namespace std;

bool isGoldenRatio(const double& a, const double& b) {
  double ratio = a / b;
  double goldenRatio = (1 + sqrt(5)) / 2;
  double tolerance = 0.01 * goldenRatio;

  return abs(ratio - goldenRatio) <= tolerance;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;

  for (int i = 0; i < n; i++) {
    double a, b; cin >> a >> b;

    if (isGoldenRatio(a, b))
      cout << "golden" << "\n";
    else
      cout << "not" << "\n";
  }

  return 0;
}