fix: counting Valleys
This commit is contained in:
parent
9c622c1aa4
commit
29251ff399
112
CountValleys/CountingValleys.java
Normal file
112
CountValleys/CountingValleys.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user