Algorithm/📊 Problem Solving

[백준/BOJ] 1737 - Pibonacci

posted by sangmin

1737 - Pibonacci

문제

피보나치(Fibonacci) 수열은 매우 유명한 수열로 그 점화식은 F[i]=F[i-1]+F[i-2]와 같이 표현된다. 우리는 이와 같은 수열을 살짝 변경한 피보나치(Pibonacci) 수열에 대해 살펴보자. 피보나치 수열의 점화식은 아래와 같다.

  • P[n] = 1 (0 ≤ n ≤ π)
  • P[n] = P[n-1] + P[n-π] (그 외)

주의할 것은 n이 꼭 정수일 필요는 없다는 것이다. 즉, P[n-π] = P[n-π-1]+P[n-π-π]와 같은 식으로 계산을 해 주어야 한다.

자연수로 n이 주어졌을 때, P[n]을 구하는 프로그램을 작성하시오.

코드

import math
import sys
sys.setrecursionlimit(10**6)

def pibonacci(num):
    if 0 <= num <= math.pi:
        return 1

    if num in dp:
        return dp[num]

    dp[num] = pibonacci(num - 1) + pibonacci(num - math.pi)
    return dp[num] % 1000000000000000000


N = int(input())

dp = dict()
print(pibonacci(N))

한마디

다른 피보나치 문제들처럼 리스트로 접근했는데, 파이 때문에 인덱스 처리를 해주지 못했다. 고민 끝에 딕셔너리를 사용했더니 한 번에 해결할 수 있었다.

 

1737번: Pibonacci

첫째 줄에 P[n]을 출력한다. 값이 매우 커질 수 있으므로 1,000,000,000,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

'Algorithm > 📊 Problem Solving' 카테고리의 다른 글

[백준/BOJ] 3055 - 탈출  (0) 2021.02.05
[백준/BOJ] 2565 - 전깃줄  (0) 2021.02.04
[백준/BOJ] 1793 - 타일링  (0) 2021.02.04
[백준/BOJ] 1965 - 상자넣기  (0) 2021.02.03
[백준/BOJ] 13301 - 타일 장식물  (0) 2021.02.03