https://www.acmicpc.net/problem/17283
시간 1초, 메모리 256MB
input :
중심 줄기의 길이 L (6 <= L <= 10,000)
비율 R(1 <= R <= 99)
output :
중심 줄기를 제외한 나뭇가지의 총 길이의 합.(소숫점 이하는 버린다.)
조건 :
나뭇가지는 2갈래로 갈라진다.
N번째 나뭇가지의 길이는 N - 1번째 나뭇가지의 길이의 R / 100 배이다.(소숫점 이하는 버린다.)
N번째 나뭇가지의 길이가 5 이하일 경우 N - 1번째 가지에서 성장을 멈춘다.
재귀 적으로 현재 몇 번째 분화하는 것인지 와 현재의 가지 길이를 입력받음
input : 몇번째 가지, 가지의 길이.
분화한 가지의 길이가 5이하이면 현재까지 계산한 나무의 길이를 반환.
나뭇가지는 1 -> 2 -> 4 -> 8 .... 2의 제곱으로 증가.
n-1 나뭇 가지 -> n 나뭇 가지로 갈때
분화된 나뭇가지의 전체 길이는 2^(n - 1) {(n - 1 나뭇가지 길이) 비율} 이고 이를 total 변수에 저장 하자.
재귀 쓸빠에 while문으로 돌리자.
종료 조건은 L 이 5 이하일 때 break.
정답 코드 :
import math
L = int(input())
R = int(input())
total = 0
cnt = 2
while 1:
L = int(L * (R / 100))
if L <= 5:
break
total += (cnt * L)
cnt *= 2
print(total)
중간에 if L < 5: 로 쓰는 바람에 한 번 틀렸다.
코드 세세히 보자...