[백준 10187] Golden (C#, C++) - soo:bak
작성일 :
문제 링크
설명
입력으로 주어지는 두 수의 비율이 황금비(약 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;
}