[HackerRank] Counting Valleys

아르당·2023년 10월 31일
0

HackerRank

목록 보기
5/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

열정적인 하이커가 하이킹을 꼼꼼하게 기록하고 있다. 마지막 하이킹에서 정확히 steps 걸음을 걷는 동안, 오르막이면 U, 내리막이면 D를 모든 걸음을 기록했다. 하이커는 항상 시작과 끝은 해수면 고도였고, 각각의 오르막과 내리막은 고도 1 단위 변화를 나타낸다.

  • 산은 해수면 위를 뜻하고, 해수면에서 오르막으로 시작하고 내리막으로 끝난다.
  • 골짜기는 해수면 아래를 뜻하고, 해수면에서 내리막으로 시작하고 오르막으로 끝난다.

하이킹 하는 동안의 오르막과 내리막이 주어졌을 때, 지나온 골짜기 수를 구해라.

Example

steps = 8 path = [DDUUUUDD]

하이커는 처음 깊이 2인 골짜기로 들어간다. 그리고 골짜기를 벗어나 높이가 2인 산으로 올라갔다. 마지막으로 하이커는 해수면으로 돌아왔고 하이킹이 끝난다.

Function Description

countingValleys 함수를 완성해라.
countingValleys 함수는 아래와 같은 매개변수를 가지고 있다.

  • int steps: 하이킹의 걸음 수
  • String path: 경로를 나타낸 문자열

Return

  • int: 지나온 골짜기 수

constraints

  • 2 <= steps <= 10^6
  • path[i] ∈ {UD}

풀이

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;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글