[BAEKJOON] 백준 26518: 수열의 극한값 (C#)
2024. 6. 23. 01:37ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/26518
문제
초항 𝑎1 𝑎2가 정해져 있고 𝑎𝑖=𝑏⋅𝑎𝑖−1+𝑐⋅𝑎𝑖−2 (𝑖≥3)이 성립하는 수열 𝑎에서, 𝑛이 무한히 증가할 때 𝑎𝑛/𝑎𝑛−1의 극한을 구하여라. 이 값은 항상 수렴함을 증명할 수 있다.
입력
첫 번째 줄에 정수 𝑏, 𝑐, 𝑎1, 𝑎2가 공백으로 구분되어 주어진다. (1≤𝑏,𝑐,𝑎1,𝑎2≤10^9)
출력
식의 극한값을 출력한다. 절대/상대 오차는 10^−6까지 허용한다.
통과한 답안
namespace _26518
{
internal class Program
{
static void Main(string[] args)
{
int[] numbers = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
double b = numbers[0];
double c = numbers[1];
double r = (b + Math.Sqrt(b * b + 4 * c)) / 2.0;
Console.WriteLine(r.ToString("F9"));
}
}
}
주어진 점화식을 이용해서 해당 수열의 극한값을 찾는 문제이다.
an / a(n-1)의 극한 값을 x라고 한다면
an 자리에 주어진 식을 넣어서 정리하면,
b + c *(a(n-2) /a(n-1))이 되고,
(a(n-2) /a(n-1)) 는 1 / x 이므로,
x = b + c / x가 되어 식을 정리하면
x^2 - bx - c = 0로 정리할 수 있다.
이 값의 극한값은 근의 공식을 이용해서 구한 값 중의 큰 값이 된다.
따라서 근의 공식을 이용하면,
극한값 x = (b + 루트(b * b + 4 c)) / 2가 된다.
이를 식으로 구현한 것이 위의 코드이며,
a1, a2는 사용되지 않았고, b와 c의 범위가 1 이상, 10^9 이하이므로,
int가 아닌 double을 사용해야 되는 문제였다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 4436: 엘프의 검 (C#) (0) | 2024.06.26 |
---|---|
[BAEKJOON] 백준 10178: 할로윈의 사탕 (C#) (0) | 2024.06.25 |
[BAEKJOON] 백준 3991: 한번 쏘면 멈출 수 없어 (C#) (0) | 2024.06.21 |
[BAEKJOON] 백준 7567: 그릇 (C#) (0) | 2024.06.21 |
[BAEKJOON] 백준 7489: 팩토리얼 (C#) (0) | 2024.06.21 |