Counting Valleys HackerRank Solution in Java 
An avid hiker keeps meticulous records of their hikes. During the last hike that took exactly steps. , for every step it was noted if it was an Uphil ,U or Downhill, D.
Hikes always start and end at sea level, and each step up or down represents a 1unit 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.
In this post, We do discuss two solution of "Counting Valleys" problem. so lets see first one.
Solution 1 
public class CountingValleys{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("Enter number of steps");
        int number = scanner.nextInt();
        
        System.out.println("Enter valleys string");
        String path = scanner.next();
        
        int steps = 0;
        int valleys = 0;
        
        // For loop until Entered number
        for (int i = 0; i < number; i++) {
            
            if (path.charAt(i) == 'U') {
                // If steps == -1 then it means hiker completed its one valleys
                if (steps == -1) {
                    valleys++;
                }
                steps++;
            }
            
            if (path.charAt(i) == 'D') {
                steps--;
            }
        }
        System.out.println(valleys);
    }
}
Output :-
Enter number of steps
8
Enter valleys string
UDDDUDUU
1
Enter number of steps
12
Enter valleys string
DDUUDDUDUUUD
2
Solution 2 
public class SubString {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("Enter valleys string");
        String path = scanner.next();        
        
        int steps = 0;
        int valleys = 0;
        
        for (char chr : path.toCharArray()) {
            if (chr == 'U') steps++;
            if (chr == 'D') steps--;
            
            if(steps == 0  && chr == 'U')
                ++valleys;
        }
        
        System.out.println(valleys);
    }
}
Output :-
Enter valleys string
UDDDUDUU
1
Enter valleys string
DDUUDDUDUUUD
2

Comments
Post a Comment