문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
한 아이가 구름 뛰어넘기 게임을 하고 있다. 이 게임에 번호가 매겨진 구름이 있고, 그 구름은 뇌운 또는 적운 일 수 있다. 캐릭터는 시작 지점에 다시 도착할때까지 구름을 계속 점프해야한다.
구름들의 배열인 c와 에너지 레벨인 e = 100이 있다. 캐릭터는 c[0]부터 시작하고 k만큼 점프해서 구름 c[(i + k) % n]으로 이동하는데 에너지 1을 사용한다. 만약 뇌운 c[i] = 1에 도착한다면, 에너지는 2만큼 감소한다. 캐릭터가 구름 0에 다시 도착하면 끝난다.
구름의 배열 c와 k가 주어졌을때, 게임이 끝나고 남은 e의 값을 구하여라.
c = [0, 0, 1, 0]
k = 2
이 경우의 경로는 0 -> 2 -> 0이다. 에너지 레벨은 각 점프마다 1씩 감소해서 98이다. 캐릭터는 하나의 뇌운에 도착했어서 에너지 2만큼 더 감소시킨다. 마지막 에너지는 96이 된다.
jumpingOnClouds 함수를 완성해라.
jumpingOnClouds 함수는 아래와 같은 매개변수를 가지고 있다.
현재 가지고 있는 에너지 100과 구름위치 0, 다시 구름 0에 도착했는지 유무를 판단할 flag를 선언하고 할당한다.
int energy = 100;
int cloud = 0;
boolean flag = true;
구름 0에 다시 도착할때까지 while을 통해 반복한다. 뇌운에서 점프할때 에너지 2를 더 감소시키고, 매 점프마다 에너지 1씩 감소시킨다. 그리고 구름위치를 바꿔주고 주어진 구름 배열의 길이를 넘어갔을 경우 구름위치에서 배열의 길이를 빼준다. 이때 구름 0에 도착했다면 구름 0에 도착했다고 flag에 false를 할당한다.
while(flag){
if(c[cloud] == 1){
energy -= 2;
}
energy--;
cloud += k;
if(cloud >= c.length){
cloud -= c.length;
}
if(cloud == 0){
flag = false;
}
}
마지막으로 계산된 에너지를 반환한다.
return energy;
static int jumpingOnClouds(int[] c, int k) {
int energy = 100;
int cloud = 0;
boolean flag = true;
while(flag){
if(c[cloud] == 1){
energy -= 2;
}
energy--;
cloud += k;
if(cloud >= c.length){
cloud -= c.length;
}
if(cloud == 0){
flag = false;
}
}
return energy;
}