
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
유명한 온라인 비디오 게임 스토어 Mist에서 비디오 게임을 사고 싶다.
보통 모든 게임은 p 달러로 같은 금액에 팔리고 있다. 그러나 다음 달에 할로윈 세일을 진행할 예정이며 더 싼 값에 게임을 살 수 있다. 명확히 말하면 첫 번째 게임은 p 달러의 가격으로 살 수 있을 것이고, 그 다음 게임부터 이전 가격보다 d 달러 차감된 가격으로 살 수 있을 것이다. 가격이 m달러보다 작거나 같아질 때까지 진행되고, 이후 모든 게임들은 m달러의 가격으로 살 수 있을 것이다. 할로윈 세일 동안 몇 개의 게임을 살 수 있을까?
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개의 게임을 살 수 있다.
howManyGames 함수를 완성해라.
howManyGames 함수는 아래와 같은 매개변수를 가지고 있다.
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;
}