DEV Community

Gabriel J
Gabriel J

Posted on

Zerando HackerRank ( 20 )

E no vigésimo episódio desta serie que queima os miolos, vamos abordar um problema envolvendo o crescimento de uma árvore que cresce de uma forma um tanto diferente.

Neste problema temos uma árvore utópica que passa por 2 ciclos de crescimento a cada ano. Na primavera dobra de altura e no verão aumenta em 1 de altura (seja qual for o sistema de medição que você queira usar). O objetivo da função é gerar a altura da árvore após um certo número de ciclos de crescimento.

Se quisermos saber a altura da árvore após 5 ciclos de crescimento, calcularemos atribuindo este valor a variável n da seguinte forma:

Image description

Nossa entrada n é a variável que conterá o número de ciclos de crescimento. Contamos a altura da árvore a partir do ciclo de crescimento 0.

No ciclo 0, a altura inicial da árvore é 1.

No ciclo 1, a árvore dobra de altura, então sua altura agora é 2.

No ciclo 2, a árvore aumenta de altura em 1. A altura da árvore é 3.

No ciclo 3, a árvore dobra de altura novamente, então sua altura agora é 6.

No ciclo 4, a árvore aumenta de altura em 1. A altura da árvore agora é 7.

No ciclo final, a árvore dobra de altura, tornando a altura da árvore 14.

A função produzirá 14.

Começamos a ver um padrão ao ver como chegamos à nossa resposta. Começando no ciclo 1, se o número do ciclo for ímpar, a árvore dobra de altura. Se for par, a árvore só aumenta de altura em 1.

Para trabalhar isso na nossa função, atribuiremos isso a duas variáveis desta forma:

Image description

Nossa variável de ciclo nos ajudará a rastrear a altura da árvore em cada ciclo de crescimento conforme contamos de 1 a n. Conhecemos a altura inicial da árvore no ciclo 0, então queremos começar a medir a altura da árvore a partir do ciclo 1.

A variável de altura manterá a altura da árvore. A função produzirá esta variável. Começamos a contar por 1, pois é a altura inicial da árvore.

Em seguida, usamos um loop while desta forma:

Image description

Queremos que nosso loop while continue em loop até que nossa variável de ciclo não seja maior que nossa entrada n.

Em nosso exemplo acima, notamos que se o ciclo de crescimento for um número ímpar, a árvore dobrará de altura. Portanto, independentemente da altura atual da árvore, nós a multiplicamos por 2.

OBS: A equação dentro da instrução if, height *= 2;, é uma forma abreviada de escrever height = height * 2;.

Se o ciclo de crescimento for um número par, incrementamos a altura da árvore em 1.

Depois que o loop passa pela instrução if, incrementamos a variável do ciclo para podermos medir a altura da árvore no próximo ciclo de crescimento.

Depois que o loop é feito, retornamos a variável de altura.

Nossa função completa vai ficar desta forma:

Image description

E assim fechamos mais um desafio.

Top comments (0)