# HackerRank - 30 Days of Code - Day 2

— algorithm, hackerrank — 1 min read

### Problem: Counting Valleys

An avid hiker keeps meticulous records of their hikes. During the last hike that took exactly `steps`

steps, for every step it was noted if it was an uphill, `U`

, or a downhill, `D`

step. Hikes always start and end at sea level, and each step up or down represents a `1`

unit change in altitude. We define the following terms:

- A mountain is a sequence of consecutive steps above sea level, starting with a step up from sea level and ending with a step down to sea level.
- A valley is a sequence of consecutive steps below sea level, starting with a step down from sea level and ending with a step up to sea level.

Given the sequence of up and down steps during a hike, find and print the number of valleys walked through.

### Example

`steps = 8 path = [DDUUUUDD]`

The hiker first enters a valley `2`

units deep. Then they climb out an up onto a mountain `2`

units high. Finally, the hiker returns to sea level and ends the hike.

### Function Description

Complete the countingValleys function in the editor below. countingValleys has the following parameter(s):

- int steps: the number of steps on the hike
- string path: a string describing the path

### Returns

- int: the number of valleys traversed

### Input Format

The first line contains an integer `steps`

, the number of steps in the hike.
The second line contains a single string `path`

, of `steps`

characters that describe the path.

### Constraints

`2 <= steps <= 10^6`

`path[i] ∈ {UD}`

### Sample Input

`8`

`UDDDUDUU`

### Sample Output

`1`

### Explanation

If we represent `\_`

as sea level, a step up as `/`

, and a step down as `\`

, the hike can be drawn as:

`1_/\ _2 \ /3 \/\/`

The hiker enters and leaves one valley.

### Solution

After thinking about the proplem, I came up with the following solution:

- Create a variable
`currentLevel`

to keep track of the current level. - Create a variable
`valleys`

to keep track of the number of valleys. - Loop through the
`path`

string. - If the current character is
`U`

, increment`currentLevel`

by`1`

. - If the current character is
`D`

, decrement`currentLevel`

by`1`

. - If
`currentLevel`

is`0`

and the current character is`U`

, increment`valleys`

by`1`

. - Return
`valleys`

.

```
1function countingValleys(steps, path) {2 let currentLevel = 0;3 let valleys = 0;4
5 for (let i = 0; i < steps; i++) {6 if (path[i] === 'D') {7 currentLevel--;8 } else if (path[i] === 'U') {9 currentLevel++;10 }11
12 if (currentLevel === 0 && path[i] === 'U') {13 valleys++;14 }15 }16
17 return valleys;18}
```

### Time Complexity

`O(n)`

where `n`

is the number of steps.