From 29251ff399538d06f6e184cf2002304ba16bef58 Mon Sep 17 00:00:00 2001 From: Sami Date: Sat, 9 Nov 2024 06:08:14 -0500 Subject: [PATCH] fix: counting Valleys --- CountValleys/CountingValleys.java | 112 ++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 CountValleys/CountingValleys.java diff --git a/CountValleys/CountingValleys.java b/CountValleys/CountingValleys.java new file mode 100644 index 0000000..0c48d13 --- /dev/null +++ b/CountValleys/CountingValleys.java @@ -0,0 +1,112 @@ +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; + } +}