[HackerRank] Jumping on the Clouds: Revisited

아르당·2023년 11월 13일
0

HackerRank

목록 보기
18/109
post-thumbnail

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

문제

한 아이가 구름 뛰어넘기 게임을 하고 있다. 이 게임에 번호가 매겨진 구름이 있고, 그 구름은 뇌운 또는 적운 일 수 있다. 캐릭터는 시작 지점에 다시 도착할때까지 구름을 계속 점프해야한다.
구름들의 배열인 c와 에너지 레벨인 e = 100이 있다. 캐릭터는 c[0]부터 시작하고 k만큼 점프해서 구름 c[(i + k) % n]으로 이동하는데 에너지 1을 사용한다. 만약 뇌운 c[i] = 1에 도착한다면, 에너지는 2만큼 감소한다. 캐릭터가 구름 0에 다시 도착하면 끝난다.
구름의 배열 c와 k가 주어졌을때, 게임이 끝나고 남은 e의 값을 구하여라.

Example

c = [0, 0, 1, 0]
k = 2

이 경우의 경로는 0 -> 2 -> 0이다. 에너지 레벨은 각 점프마다 1씩 감소해서 98이다. 캐릭터는 하나의 뇌운에 도착했어서 에너지 2만큼 더 감소시킨다. 마지막 에너지는 96이 된다.

Function Description

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

  • int c[n]: 지나갈 경로의 구름 타입
  • int k: 한번에 점프할 길이

Return

  • int: 남은 에너지 레벨

Constraints

  • 2 <= n <= 25
  • 1 <= k <= n
  • n % k = 0
  • c[i] ∈ {0, 1}

풀이

현재 가지고 있는 에너지 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;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글