[HackerRank] Jumping on the Clouds

아르당·2023년 11월 22일

HackerRank

목록 보기
25/109
post-thumbnail

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

문제

연속적으로 번호가 있는 구름에서 움직이는 새로운 모바일 게임이 있다. 몇몇 구름은 적란운이고 나머지는 적운이다. 플레이어는 같은 적운을 1칸 또는 2칸을 점프할 수 있다. 플레이어는 적란운은 피해야 한다. 출발지에서 도착지까지 최소로 점프하는 횟수를 구해라. 항상 마지막 구름은 적운이다.

Example

c = [0, 1, 0, 0, 0, 1, 0]

인덱스가 0부터 6까지 있는 배열이 있다. 인덱스는 각 구름의 번호이고, 1번 구름과 5번 구름은 피해야 한다. 두 개의 경로 0 -> 2 -> 4 ->6, 0 -> 2 -> 3 -> 4 -> 6을 구할 수 있다. 첫 번째 경로는 3번의 점프, 두 번째 경로는 4번의 점프를 한다. 그래서 3을 반환한다.

Function Description

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

  • int c[n]: 0과 1로 된 배열

Return

  • int: 최소 점프 횟수

Constraints

  • 2 <= n <= 100
  • c[i] ∈ {0, 1}
  • c[0] = c[n - 1] = 0

풀이

while문을 통해 문제를 해결했다. while문 안에 if문을 사용해 점프할 수 있는 칸인지 구하고 점프 횟수와 현재 위치를 수정하면 쉽게 해결할 수 있다.

점프 횟수를 담을 count와 현재 구름 위치를 담을 idx를 선언한다.

int count = 0;
int idx = 0;

while문을 통해 현재 위치를 옮겨주면서 점프 횟수를 증가시킨다.

while(idx < c.size() - 1){
	// 2칸을 점프했을때 리스트를 벗어나는지 적운인지 확인
	if(idx + 2 < c.size() && c.get(idx + 2) == 0){
		idx += 2;
	}else{
		idx++;
	}

	count++;
}

count를 반환한다.

return count;

전체 코드

public static int jumpingOnClouds(List<Integer> c) {
	int count = 0;
	int idx = 0;

	while(idx < c.size() - 1){
		if(idx + 2 < c.size() && c.get(idx + 2) == 0){
			idx += 2;
		}else{
			idx++;
		}

		count++;
	}

	return count;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글