BOJ 17283 I am Groot

2912 단어 2020.12.272020.12.27

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: 로 쓰는 바람에 한 번 틀렸다.
코드 세세히 보자...

좋은 웹페이지 즐겨찾기