codeChallenge/CountValleys/CountingValleys.java
2024-11-09 06:08:14 -05:00

113 lines
3.0 KiB
Java

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;
}
}