
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
연속적으로 번호가 있는 구름에서 움직이는 새로운 모바일 게임이 있다. 몇몇 구름은 적란운이고 나머지는 적운이다. 플레이어는 같은 적운을 1칸 또는 2칸을 점프할 수 있다. 플레이어는 적란운은 피해야 한다. 출발지에서 도착지까지 최소로 점프하는 횟수를 구해라. 항상 마지막 구름은 적운이다.
c = [0, 1, 0, 0, 0, 1, 0]
인덱스가 0부터 6까지 있는 배열이 있다. 인덱스는 각 구름의 번호이고, 1번 구름과 5번 구름은 피해야 한다. 두 개의 경로 0 -> 2 -> 4 ->6, 0 -> 2 -> 3 -> 4 -> 6을 구할 수 있다. 첫 번째 경로는 3번의 점프, 두 번째 경로는 4번의 점프를 한다. 그래서 3을 반환한다.
jumpingOnClouds 함수를 완성해라.
jumpingOnClouds 함수는 아래와 같은 매개변수를 가지고 있다.
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;
}