본문 바로가기

알고리즘/python

[python/파이썬] 백준 17291 새끼치기

반응형

[문제 출처]

https://www.acmicpc.net/problem/17291

 

17291번: 새끼치기

실험실에서 새로운 종의 벌레 한 마리가 탄생하였다. 벌레는 스스로 분열하며, 분열하면 자기 자신과 같은 벌레를 한 마리 만들어 내게 된다. 벌레가 분열하는 규칙은 다음과 같다. 벌레는 기준

www.acmicpc.net

 

[문제 풀이 ] 

 

num list에 연도 말에 존재하는 개체수를 저장한다. 

그리고 death list에 해당 연도에 죽는 개체수를 저장한다. 

 

태어날 때 그 해가 홀수년인지 짝수년인지 확인하고 죽는 년도를 계산하여 death에 저장한다.

 

i번째 연도에는 i-1번째 연도의 개체수만큼 태어나므로 

홀수년이면 i+3년에 i년에 태어난만큼 더 죽고, 짝수년이면 i+4년에 i년에 태어난 만큼 더 죽는다.

 

i년의 개체수는 분열하므로 전년도 개체수의 두배를 하고 죽는 개체수만큼 빼서 저장하였다.

 

import sys
input = sys.stdin.readline

n = int(input())

death =[0 for _ in range(21)]
num = [0 for _ in range(21)]
num[1] = 1
death[4] = 1

for i in range(2,21):
    birth = num[i-1]
    num[i] = num[i-1] * 2 - death[i]   
    
    if i%2 == 0:
        if i+4 <= 20:
            death[i+4] += birth
    else:
        if i+3 <= 20:
            death[i+3] += birth
print(num[n])
반응형