import java.util.Scanner; /** * CountingValleys * 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 uphill, , * or a downhill, step. Hikes always start and end at sea level, and each step * up or down represents a * * 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 * * The hiker first enters a valley units deep. Then they climb out and up onto a * mountain * * 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 * , the number of steps in the hike. * The second line contains a single string , of * * characters that describe the path. * * Constraints * * 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: * * The hiker enters and leaves one valley. * BlogScoringEnvironmentFAQAbout UsSupportCareersTerms Of ServicePrivacy Policy */ public class CountingValleys { // /\ // _ / \_ // \ / // \/ public static void main(String[] args) { System.out.println("Please enter the number of steps: "); Scanner sc = new Scanner(System.in); int steps = sc.nextInt(); sc.nextLine(); // consume the newline System.out.println("The hiker is taking " + steps + " steps starting from sea level."); System.out.println("Please enter the path (U for up, D for down):"); String path = sc.nextLine(); sc.close(); System.out.println("Number of valleys: " + countingHikeValleys(steps, path)); } private static int countingHikeValleys(int steps, String path) { int valleysCount = 0; int seaLevel = 0; boolean inValley = false; for (char step : path.toCharArray()) { if (Character.toUpperCase(step) == 'U') { seaLevel++; } else if (Character.toUpperCase(step) == 'D') { seaLevel--; } // If we're below sea level and weren't before, we're entering a valley if (seaLevel < 0 && !inValley) { valleysCount++; inValley = true; } // If we're at or above sea level, we're no longer in a valley if (seaLevel >= 0) { inValley = false; } } return valleysCount; } }