Level. 1
문제
콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?
단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다.
콜라를 받기 위해 마트에 주어야 하는 병 수 - a
빈 병 a개를 가져다주면 마트가 주는 콜라 병 수 - b
상빈이가 가지고 있는 빈 병의 개수 - n
이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해 주세요.
풀이
#include <string>
#include <vector>
using namespace std;
int solution(int a, int b, int n) {
int answer = 0;
while(n>=a){
answer += (n/a * b);
n = n%a + (n/a * b);
}
return answer;
}
해결 방법
0. 현재 가지고 있는 콜라병의 개수가 a(콜라를 받기 위해 마트에 주어야 하는 병 수)와 같거나 클 때까지만 반복문을 돌려주었다.
1. 반복문을 돌 때마다 answer(받은 콜라병의 개수)에 새로 받게 된 콜라병 수(n/a * b)를 더해주었다.
2. 새롭게 받게 된 콜라병(n/a * b)으로도 교한이 가능하기 때문에, 현재 가지고 있는 그만큼 다시 더해주어 반복문을 돌렸다.
다른 사람 풀이
#include <string>
#include <vector>
using namespace std;
int solution(int a, int b, int n) {
int answer = 0;
while(n >= a){
answer += b;
n -= (a - b);
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/132267?language=cpp
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 옹알이(2) (0) | 2023.07.06 |
---|---|
[프로그래머스] 햄버거만들기 - vector.back() (0) | 2023.07.06 |
[프로그래머스] 영어 끝말잇기 (0) | 2023.06.25 |
[프로그래머스] 문자열 나누기 (0) | 2023.06.10 |
[프로그래머스] 푸드 파이트 대회 - reverse() (0) | 2023.04.16 |