✔ 콜라 문제
문제 분석하기
가지는 있는 빈 병의 개수를 마트에 주어야 하는 병의 개수로 나누어 그 병수 개수에 대해 b만큼 콜라를 받을 수 있음
만약 나누어지지 않는다면 나누어지는 만큼은 마트에 가져가서 콜라를 받고, 나머지는 그냥 가지고 있도록 함
손으로 풀어보기
- 가지고 있는 빈 병에 대해서 마트에서 몇 개의 콜라를 받을 수 있는지 계산
- 만약 모두 나누어 진다면 그만큼 콜라를 받음 (n / a * b)
- 만약 나머지가 존재한다면 나누어지는 만큼은 콜라를 받고(n / a * b), 나머지(n % a)만큼은 가지고 있도록 함
- 가지고 있는 병의 갯수가 마트에 주어야 하는 병의 개수보다 많을 동안(n >= a) 반복
- 받을 수 있는 콜라의 병 수를 반환
슈도코드 작성하기
a(콜라를 받기 위해 마트에 주어야 하는 병 수)
b(빈 병 a개를 가져다 주면 마트가 주는 콜라의 병 수)
n(상빈이가 가지고 있는 빈 병의 개수)
answer(상빈이가 받을 수 있는 콜라의 병 수)
bonus(한 번 빈 병을 가져다 주고 받는 콜라의 병 수)
while(가지고 있는 병의 갯수가 마트에 주어야 하는 병의 개수보다 많을 동안) {
bonus = n / a * b
answer += bonus만큼 증가
n = bonus + (n % a)
}
answer 반환
코드 구현하기
/**
* 132267) 콜라_문제
*/
public class L059_132267 {
// a(콜라를 받기 위해 마트에 주어야 하는 병 수)
// b(빈 병 a개를 가져다 주면 마트가 주는 콜라의 병 수)
// n(상빈이가 가지고 있는 빈 병의 개수)
public int solution(int a, int b, int n) {
// answer(상빈이가 받을 수 있는 콜라의 병 수)
int answer = 0;
// bonus(한 번 빈 병을 가져다 주고 받는 콜라의 병 수)
int bonus = 0;
// 가지고 있는 병의 갯수가 마트에 주어야 하는 병의 개수보다 많을 동안
while (n >= a) {
// 나누어지는 만큼(n / a * b) 콜라를 받음
bonus = n / a * b;
// bonus만큼 증가
answer += bonus;
// 나머지(n % a)만큼은 마트에 가지고 가지 않고 가지고 있도록 함
n = bonus + (n % a);
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L059_132267 solution = new L059_132267();
int a = 3;
int b = 1;
int n = 20;
int result = solution.solution(a, b, n);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[131128] 숫자 짝꿍 (0) | 2023.12.15 |
---|---|
[131705] 삼총사 (0) | 2023.12.15 |
[133499] 옹알이 (2) (0) | 2023.12.13 |
[133502] 햄버거 만들기 (0) | 2023.12.12 |
[134240] 푸드 파이트 대회 (0) | 2023.12.12 |