문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
열정적인 하이커가 하이킹을 꼼꼼하게 기록하고 있다. 마지막 하이킹에서 정확히 steps 걸음을 걷는 동안, 오르막이면 U, 내리막이면 D를 모든 걸음을 기록했다. 하이커는 항상 시작과 끝은 해수면 고도였고, 각각의 오르막과 내리막은 고도 1 단위 변화를 나타낸다.
하이킹 하는 동안의 오르막과 내리막이 주어졌을 때, 지나온 골짜기 수를 구해라.
steps = 8 path = [DDUUUUDD]
하이커는 처음 깊이 2인 골짜기로 들어간다. 그리고 골짜기를 벗어나 높이가 2인 산으로 올라갔다. 마지막으로 하이커는 해수면으로 돌아왔고 하이킹이 끝난다.
countingValleys 함수를 완성해라.
countingValleys 함수는 아래와 같은 매개변수를 가지고 있다.
3개의 변수를 먼저 선언한다.
int altitude = 0; // 현재 고도
boolean isValley = false; // 현재 골짜기 인지
int count = 0; // 지나온 골짜기 수
반복문을 통해 현재 고도를 구한다. 그리고 현재 고도에 따라 지금 골짜기에 있는지, 지나왔는지 확인한다. 하나의 반복문을 통해 모든 것을 확인하려고 하니까 조건문이 많이 들어갔다.
for(int i = 0; i < steps; i++){
if(path.charAt(i) == 'U'){
altitude++;
}else{
altitude--;
}
if(altitude < 0 && !isValley){
isValley = true;
count++;
}else if(altitude >= 0){
isValley = false;
}
}
마지막으로 지나온 골짜기 수를 반환한다.
return count;
public static int countingValleys(int steps, String path) {
int altitude = 0;
boolean isValley = false;
int count = 0;
for(int i = 0; i < steps; i++){
if(path.charAt(i) == 'U'){
altitude++;
}else{
altitude--;
}
if(altitude < 0 && !isValley){
isValley = true;
count++;
}else if(altitude >= 0){
isValley = false;
}
}
return count;
}