[HackerRank] Halloween Sale

아르당·2023년 11월 30일
0

HackerRank

목록 보기
37/109
post-thumbnail

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

문제

유명한 온라인 비디오 게임 스토어 Mist에서 비디오 게임을 사고 싶다.
보통 모든 게임은 p 달러로 같은 금액에 팔리고 있다. 그러나 다음 달에 할로윈 세일을 진행할 예정이며 더 싼 값에 게임을 살 수 있다. 명확히 말하면 첫 번째 게임은 p 달러의 가격으로 살 수 있을 것이고, 그 다음 게임부터 이전 가격보다 d 달러 차감된 가격으로 살 수 있을 것이다. 가격이 m달러보다 작거나 같아질 때까지 진행되고, 이후 모든 게임들은 m달러의 가격으로 살 수 있을 것이다. 할로윈 세일 동안 몇 개의 게임을 살 수 있을까?

Example

p = 20
d = 3
m = 6
s = 70

다음은 처음부터 11번 째까지 가격이다.

20, 17, 14, 11, 8, 6, 6, 6, 6, 6, 6

p = 20 가격에서 시작해서 각 회차마다 d = 3씩 감소시켜서 최소 가격 m = 6까지 반복한다. Mist의 지갑에 70달러로 시작해서, 20 + 17 + 14 + 11 + 8 = 70으로 총 5개의 게임을 살 수 있다.

Function Description

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

  • int p: 첫 번째 게임 가격
  • int d: 이전의 게임 가격부터 감소하는 가격
  • int m: 게임의 최소 가격
  • int s: 소유한 시작 한도

Constraints

  • 1 <= m <= p <= 100
  • 1 <= d <= 100
  • 1 <= s <= 10^4

풀이

while문을 사용해서 게임을 살 수 있을 때까지 반복하면 된다. 반복하면서 if문을 사용하면서 금액들을 계속 변경한다.

산 게임의 개수를 반환할 count를 선언하고 0을 할당한다.

int count = 0;

while문을 사용해서 s가 0보다 클때까지 반복한다.

while(s > 0){

}

이제 while문 안을 채워 나간다.
먼저 p와 m을 비교해서 소유한 금액을 차감한다. 만약 p가 m보다 크거나 같으면 p만큼 차감하고, 그렇지 않다면 m만큼 차감한다.

while(s > 0){
	if(p >= m){
		s = s - p;
	}else{
		s = s - m;
	}
}

게임을 샀으니까 count를 증가시킨다. 이때 소지금이 0보다 크거나 같아야 한다. 0보다 작을 경우는 살 수 없기 때문이다.

// while문 안에 이어서
if(s >= 0){
	count++;
}

이어서 게임 가격 p를 d만큼 차감시켜야 하는데 m보다 클 경우 d만큼 차감시키고, 그렇지 않은 경우 p에 m을 할당한다. p는 최소 가격인 m보다 작아질 수 없기 때문이다.

// 이전 코드에 이어서
if(p - d > m){
	p = p - d;
}else{
	p = m;
}

while문 밖에 최종적으로 count를 반환한다.

return count;

전체 코드

public static int howManyGames(int p, int d, int m, int s) {
	int count = 0;

	while(s > 0){
		if(p >= m){
			s = s - p;
		}else{
			s = s - m;
		}

		if(s >= 0){
			count++;
		}

		if(p - d > m){
			p = p - d;
		}else{
			p = m;
		}
	}

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

0개의 댓글