[HackerRank/C++] Chocolate Feast

2023. 2. 7. 07:51코딩테스트 해커랭크/Algorithms -Easy

현재 n의 소지금을 가지고 있고, 초콜릿의 가격이 c이며 초콜릿을 먹고 남은 포장지 m개가 있다면 새 초콜릿 1개로 교환할 수 있다

 

이 때 먹을 수 있는 초콜릿의 수를 return 한다

int chocolateFeast(int n, int c, int m)
{
    int result = n / c;
    
    int wrapper = n / c;
    
    while (m <= wrapper)
    {
        result += wrapper / m;
        wrapper = (wrapper / m) + (wrapper % m);
    }
    
    return result;
}

예전에 많이 돌아다니던 콜라병 문제와 꽤나 비슷한 유형이다

 

초콜릿의 포장지 수는 n / c이며 그만큼 초콜릿을 먹을 수 있으므로 result와 wrapper의 초기값은 n / c로 초기화 한다

 

이후 포장지의 수가 교환 갯수 m보다 적어질때 까지 반복문을 돌며 wrapper / m을 result에 더해주고, wrapper의 수는 교환하고 새로 먹은 초콜릿 수 + 교환하고 남은 초콜릿 수가 된다

 

반복문이 끝나면 result를 return 한다