Algorithm

[Programmers/Java] 콜라 문제

patrck_jjh 2025. 3. 26. 20:02

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/132267

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

class Solution {
    public int solution(int a, int b, int n) {
        int answer=0, spare = 0;
        
        while (n > 0) {
            
            if (n < a) break;

            answer += (n/a)*b;
            spare = n%a;
            n = (n/a)*b + spare;
        }

        return answer;
    }
}

 

 


 

  • n개의 빈병을 가지고있고 a병을 가져다주면 b병을 주므로 다음 회차에 받는 콜라는 (n/a)*b이다
  • n이 a로 정확하게 나누어지지 않을 때 남는 병(spare)이 생기므로 따로 계산한다
  • 다음 회차에 적용할 전체 콜라병 수(n)을 구할 때 남는 병(n%a)을 합산한다
  • 가지고 있는 콜라병의 수(n)이 콜라를 받기위 한 최소한의 수(a)보다 작으면 종료된다 

 


 

 

 case1) a = 2, b = 1, n = 20

  (n/a) * b n%a n
1 (20/2)*1 = 10 0 10
2 (10/2)*1= 5 0 5
3 (5/2)*1 = 2 1 3
4 (3/2) *1= 1 2 2
5 (2/2)*1=1 0 1(n < a)
sum 19    

 

 

case2) a = 3, b = 1, n = 20

  (n/a) * b n%a n
1 (20/3)*1 = 6 20%3 = 2 8
2 (8/3)*1 = 2 8%3 = 2 4
3 (4/3)*1 = 1 4/3 = 2 3
4 (3/3)*1 = 1 3%3 = 0 1(n < a)
sum 9