◇ 문제 설명
X마트에서는 빈 병 n개와 음료수 한 병을 교환해줍니다.
예를 들어 현재 가진 돈이 8원, 음료수 한병은 2원이고, n이 4라면 음료수 4개를 살 수 있습니다. 음료수 네개를 다 마신 후, 남은 빈병 4개를 가져가면 음료수를 한 병 더 받을 수 있습니다. 따라서 8월으로는 음료수를 총 5병 마실 수 있습니다.
가진 돈 money, 음료수 한 병의 가격 price, 음료수 한 병과 교환하는데 필요한 빈 병의 수 n이 매개변수로 주어질때 마실 수 있는 총 음료수의 수를 return하도록 solution함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어 있기 때문에 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
◇ 매개변수 설명
가진 돈 money, 음료수 한 병의 가격 price, 음료수 한 병과 교환하는데 필요한 빈 병의 수 n이 solution함수의 매개변수로 주어집니다.
▶ 가진 돈 money는 1이상 1000이하인 자연수입니다.
▶ 음료수 한 병의 가격 price는 1이상 100이하인 자연수입니다.
▶ 음료수 한 병과 교환하는데 필요한 빈병의 수 n은 3이상 10이하인 자연수입니다.
◇ return값 설명
마실 수 있는 음료수의 수를 return해주세요.
◇ 예시
money | price | n | return | |
예시 #1 | 8 | 2 | 4 | 5 |
예시 #2 | 6 | 2 | 2 | 5 |
◇ 예시 설명
예시 #1
문제에 나온 예와 같습니다.
예시 #2
1. 6원으로 2원짜리 음료수 3개를 삽니다.
2. 음료를 다 마시면 빈병 3개가 남습니다. 이중 빈병 두개를 가져가 새 음료수 한병과 교환합니다.
3. 음료를 마시면 빈 병 2개가 남습니다. 이를 새 음료수 한 병으로 교환합니다.
따라서 총 6원으로는 음료수 5병을 마실 수 있습니다.
◇ 초기 내용
◇ 답안
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int money, int price, int n) {
int answer = 0;
int empty_bottle = answer = money / price;
while(n <= empty_bottle) {
empty_bottle = empty_bottle - n;
answer++;
empty_bottle++;
}
return answer;
}
int main() {
int money1 = 8;
int price1 = 2;
int n1 = 4;
int ret1 = solution(money1, price1, n1);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
int money2 = 6;
int price2 = 2;
int n2 = 2;
int ret2 = solution(money2, price2, n2);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}
◇ 답안 힌트
▶ (음료 하나를 살수 있는 빈병의 개수)로 음료를 사고 남은 (내가 가진 빈병의 개수)는 몇개일까?
▶ 음료 하나를 살수있는 빈병의 개수보다 내가 가진 빈병의 개수가 크면 아래 문장 실행
◇ 답안 풀이
(※ 실행 흐름 순으로 해석됩니다.)
int solution(int money, int price, int n) {
int answer = 0;
//빈병은 내가 가진 돈으로 음료수를 살수 있는 개수와 같다.
int empty_bottle = answer = money / price;
//음료 하나를 살수있는 빈병의 개수보다 내가 가진 빈병의 개수가 크면 아래 문장 실행
while(n <= empty_bottle) {
//(음료 하나를 살수 있는 빈병의 개수)로 음료를 사고 남은 (내가 가진 빈병의 개수)는 empty_bottle - n
// empty_bottle + n을 하게되면 내가 빈병을 받고 음료를 산것과 같다(성립불가)
empty_bottle = empty_bottle - n;
//answer++은 내가 마신 음료의 개수가 +1했다는것을 의미한다.
answer++;
//empty_bottle++은 내가 위에서 마신 음료로 인해 생긴 빈병의 개수가 +1되었다는 뜻이다.
empty_bottle++;
}
return answer;
}
◇ 실행결과
◇ 출처
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io
'Cospro 2급 > C언어' 카테고리의 다른 글
[6차] 문제7. 의자와 책상을 사고싶어요. 답안 및 풀이 (0) | 2021.05.30 |
---|---|
[6차] 문제6. 비밀번호는 만드는것보다 검사하는게 힘들죠. 답안 및 풀이 (0) | 2021.05.30 |
[6차] 문제4. 카드뽑기 게임! (도박은 안되요!) 답안 및 풀이 (0) | 2021.05.30 |
[6차] 문제3. 단체 유니폼 맞추기 답안 및 풀이 (0) | 2021.05.30 |
[6차] 문제2. 종이 나누어 주기 답안 및 풀이 (0) | 2021.05.30 |
댓글