5SOO_O 의 개발 공부 일지

[Python] [Rosalind] Mortal Fibonacci Rabbits 본문

자료구조 및 바이오 인포매틱스

[Python] [Rosalind] Mortal Fibonacci Rabbits

5soo_o 2022. 4. 11. 16:42

m개월의 유한한 수명을 가진 토끼가 있을 때,

n개월 뒤에는 몇 마리의 토끼가 있는지 구하는 문제.

피보나치를 어떻게 활용할지 고민하니까 어렵게 느껴지는 문제였다.

 

수명이 4달인 토끼가 있다고 가정하자. 태어난지 i달 된 어른 토끼를 A1, A2, A3, ... , Ai 라고 하자.

시간 t가 n 달이 지날 때 태어난 새끼 토끼는 다음과 같은 과정에서 자라난다.

1. t = n + 1 달일 때 A1가 된다.

2. t = n + 2달일 때 A2가 된다.

3. t = n + 3달일 때 A3가 된다.

4. t = n + 4달일 때 죽는다.

 

변수에 토끼를 한마리씩 담고,

시간이 지나면서 수명이 지난 토끼를 빼 주는 식으로 코드를 작성했다.

 

 

코드

def fib_rabbit(n, m):
    living = [1, 1]	# 첫째달 1쌍, 둘째달 1쌍으로 시작한다.

    for i in range(2, n):
    # 그 다음 달 토끼는 첫째달 토끼 + 새끼 이므로, 첫째달 토끼 수와 둘째달 토끼 수를 더한 수와 같다.
        total = living[i-1] + living[i-2]	
		
        # 수명이 m 개월인데 토끼가 태어난지 m 달이 되었다면, 그 토끼는 죽는다
        if i == m:
            total = total - 1
		
     	# 시간이 지나면서 수명이 지난 토끼는 계속 죽는다
        if i > m:
            total = total - living[i-m-1]

        living.append(total)

	# 문제에서 요구하는 값만 반환
    return living[-1]


print(fib_rabbit(6, 3))

 

rosalind에 제출하면 정답이라고는 하는데

이상하게 손으로 구한 토끼 수랑 차이가 난다..??

내일 다시 한 번 풀어 봐야겠다.

 

728x90