6차 문제 5
문제 설명
X 마트에서는 빈 병 n개와 음료수 한 병을 교환해줍니다.
예를 들어, 현재 가진 돈이 8원, 음료수 한 병은 2원이고 n이 4라면 음료수 4개를 살 수 있습니다. 음료수 네 개를 다 마신 후, 남은 빈 병 4개를 가져가면 음료수를 한 병 더 받을 수 있습니다. 따라서 8원으로는 음료수를 총 5병 마실 수 있습니다.
가진 돈 money, 음료수 한 병의 가격 price, 음료수 한 병과 교환하는데 필요한 빈 병의 수 n이 매개변수로 주어질 때, 마실 수 있는 총 음료수의 수를 return 하도록 solution 함수를 작성했습니다.
그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.
예시
money | price | n | return |
8 | 2 | 4 | 5 |
6 | 2 | 2 | 5 |
예시 2
1. 6원으로 2원짜리 음료수 3개를 삽니다.
2. 음료를 다 마시면 빈 병 3개가 남습니다. 이 중 빈 병 두 개를 가져가 새 음료수 한 병과 교환합니다.
3. 음료를 마시면 빈 병 2개가 남습니다. 이를 새 음료수 한 병으로 교환합니다.
따라서 총 6원으로는 음료수 5병을 마실 수 있습니다.
수정해야 할 코드
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;
}
수정
empty_bottle = empty_bottle + n; → empty_bottle = empty_bottle - n; |
코드 해석 및 전체 코드
현재 가진 돈으로 음료수를 몇 개를 살 수 있고,
음료수를 마신 뒤 빈병으로 음료수를 교환해
총 음료수를 몇 병 마실 수 있는지 구해야 한다.
예시 2로 적용
empty_bottle은 빈 병을 나타내며, answer는 마실 수 있는 총음료수의 수이다.
int empty_bottle = answer = money / price )현재 가진 돈으로 몇 병을 살 수 있는지 값을 저장한다. 6 / 2 = 3
while문에서 empty_bottle이 n보다 크거나 같을 때까지 반복한다.
n은 1병으로 교환할 수 있는 빈 병의 수이고, empty_bottle은 내가 가지고 있는 빈 병의 수이다.
그러므로 empty_bottle이 n보다 작으면 (내가 가진 빈 병이 교환할 수 있는 빈 병의 수보다 작으면) 교환할 수 없으므로 while문을 수행할 수 없다.
empty_bottle이 n보다 크거나 같다면 empty_bottle에서 n만큼 뺀다.
= 교환이 가능하므로 한 병을 교환하기 위해 n개를 슈퍼에 반납한다.
내 음료수가 한 개가 증가했으므로 answer를 1 증가한다.
또한 내가 음료수를 마셔서 빈 병이 생겼으므로 empty_bottle도 1 증가한다.
while( n <= empty_bottle) | empty_bottle -= n | answer | empty_bottle |
2 <= 3 O |
3 - 2 = 1 | answer++ = 4 | empty_bottle++ = 2 2열에서 빈 병의 수 1됨. |
2 <= 2 O |
2 - 2 = 0 | answer++ = 5 | empty_bottle++ = 1 |
2 <= 1 X |
따라서 총 음료수의 수는 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);
}
구름 goormedu COS PRO 2급 기출문제 - C언어
'코딩 테스트 > [c언어] cos pro 2급 기출문제' 카테고리의 다른 글
[No.57] 6차 문제 7 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.30 |
---|---|
[No.56] 6차 문제 6 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.30 |
[No.54] 6차 문제 4 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.29 |
[No.53] 6차 문제 3 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.29 |
[No.52] 종이 나누어 주기 / cos pro 2급 c언어 기출 문제 6차 문제 2 (0) | 2021.05.28 |
댓글