113 lines
3.0 KiB
Java
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;
|
|
}
|
|
}
|