[HackerRank] Chocolate Feast

아르당·2023년 12월 1일

HackerRank

목록 보기
38/109
post-thumbnail

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

문제

어린 Bobby는 초콜릿을 사랑한다. 초콜릿을 사기 위해 5 & 10 상점인 Penny Auntie 자주 갔다. Penny Auntie에서 프로모션을 하고 있다. 만약 Bobby가 충분한 포장지가 있다면, 무료로 초콜릿으로 교환할 수 있다.

Example

n = 15
c = 3
m = 2

그는 15를 사용할 수 있고, 초콜릿의 가격은 3이고, 2개의 포장지를 사용해서 초콜릿으로 교환할 수 있다. 처음에 5개의 초콜릿을 사서 먹은 후에 5개의 포장지를 가지고 있다. 그는 초콜릿 2개를 교환하기 위해 포장지를 1개를 남기고 4개의 포장지를 사용한다. 두 개의 초콜릿을 먹은 후에 3개의 포장지를 가지고 있다. 그리고 2개의 포장지를 사용해서 새로운 초콜릿으로 교환했다. 한 번 더 초콜릿 하나를 먹고 포장지 2개를 사용해서 또 다른 초콜릿으로 교환했다. 초콜릿 한 개를 먹고 포장지 1개가 남고 끝나게 된다. 종합하면 그는 5 + 2 + 1 + 1 = 9개의 초콜릿을 먹었다.

Function Description

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

  • int n: Bobby가 처음에 가지고 있는 돈
  • int c: 초콜릿의 가격
  • int m: 초콜릿을 교환할 수 있는 포장지의 수

Return

  • int: 프로모션을 최대한 사용해서 먹을 수 있는 초콜릿 개수

Constraints

  • 1 <= t <= 1000
  • 2 <= n <= 10^5
  • 1 <= c <= n
  • 2 <= m <= n

풀이

처음에 초콜릿을 교환한 개수와 포장지의 개수를 담아 둘 변수와 값을 할당한다.

int bars = n / c;
int wrappers = bars; // 처음에는 초콜릿 개수가 포장지 개수

while문을 사용해서 포장지가 교환할 수 있는 포장지 개수보다 크거나 같을 때까지 반복한다.

while(wrappers >= m){
	// 포장지로 교환한 초콜릿 개수를 더한다.
	bars += wrappers / m;
    
    // 교환한 초콜릿과 교환후 남은 포장지의 개수를 더해서 포장지에 할당
    wrappers = wrappers / m + wrappers % m;
}

마지막은 역시 bars를 반환한다.

return bars;

전체 코드

public static int chocolateFeast(int n, int c, int m) {
	int bars = n / c;
	int wrappers = bars;

	while(wrappers >= m){
		bars += wrappers / m;
		wrappers = wrappers / m + wrappers % m;
	}

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

0개의 댓글