DEV Community

Gabriel J
Gabriel J

Posted on

Zerando HackerRank ( 19 )

E no décimo nono episodio desta serie que queima os miolos, vamos abordar um problema envolvendo uma contagem de vales que serão percorridos.

Neste Problema, um alpinista registra os locais que ele passa, marcando tanto as subidas quanto as descidas. Cada passo é representado por "u" para subida e "d" para descida.

Por exemplo, seu último registro foi de 8 passos com a seguinte sequência: dduuudd

Uma montanha é definida como uma sequência consecutiva de degraus acima do nível do mar, começando com um passo acima do nível do mar e um passo abaixo do nível do mar.

Um vale é definido como uma sequência consecutiva de degraus abaixo do nível do mar, começando com um passo abaixo do nível do mar e terminando com um passo subindo até o nível do mar.

Para resolver este problema nos criaremos a função "countingValleys", essa função recebe dois argumentos: steps (um número inteiro que representa o número de passos) e path (uma string que representa uma sequência de subidas e descidas, onde "U" significa subida e "D" significa descida). A função conta o número de "vales" percorridos pelo caminhante. Um vale é definido como uma sequência de passos onde o caminhante começa em um nível do mar, desce para um vale e depois sobe de volta para o nível do mar.

A função começa definindo três variáveis: traversedValleyCount, isInValley, e altitude. traversedValleyCount é inicializada como zero sendo usada para contar o número de vales percorridos. isInValley é inicializada como false sendo usada para determinar se o caminhante está atualmente em um vale ou não. Altitude é inicializada como zero sendo usada para manter o registro da altitude atual do caminhante.

Em seguida, a função usa um loop for para iterar através da sequência path. Para cada passo no caminho, a função verifica se o caminhante está subindo ou descendo. Se o caminhante está descendo (path[i] === "D"), a função decrementa a variável altitude. Se o caminhante está subindo (path[i] === "U"), a função incrementa a variável altitude. Em seguida, a função verifica se o caminhante está em um vale. Se o caminhante estiver abaixo do nível do mar (altitude < 0) e não estiver atualmente em um vale (isInValley === false), a função define isInValley como true. Se o caminhante já estiver em um vale (isInValley === true) e retornar ao nível do mar (altitude === 0), a função incrementa traversedValleyCount e redefine isInValley como false.

Por fim, a função retorna o número total de vales percorridos pelo caminhante, que foi contado pela variável traversedValleyCount.

Nossa função vai ficar desta forma:

Image description

E assim fechamos mais um desafio.

Oldest comments (0)