5SOO_O 의 개발 공부 일지
[Python] [Rosalind] Mortal Fibonacci Rabbits 본문
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
'자료구조 및 바이오 인포매틱스' 카테고리의 다른 글
| [Python] [Rosalind] Independent Alleles (0) | 2022.04.12 |
|---|---|
| [Python] [Rosalind] Calculating Expected Offspring (0) | 2022.04.12 |
| [Python] [Rosalind] Consensus and Profile (0) | 2022.04.11 |
| [Python] [Rosalind] Mendel's First Law (0) | 2022.04.11 |
| [Python] [ROSALIND] Finding a Motif in DNA (0) | 2022.04.08 |