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 |
'Algorithm' 카테고리의 다른 글
[Programmers/Java] 추억 점수 (0) | 2025.03.28 |
---|---|
[Programmers/Java] 비밀지도 (0) | 2025.03.27 |
[Programmers/Java] 문자열 내 마음대로 정렬하기 (0) | 2025.03.25 |
[Programmers/Java] 푸드 파이트 대회 (0) | 2025.03.21 |
[Programmers/Java] 숫자 문자열과 영단어 (0) | 2025.03.20 |