본문 바로가기
Cospro 2급/C언어

[6차] 문제5. 음료수 마시기. (빈병으로 음료수를 사세요!) 답안 및 풀이

by SRin23 2021. 5. 30.

◇ 문제 설명

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병을 마실 수 있습니다.

 

◇ 초기 내용

[출처]goormedu COSPRO 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;
}

 

 

◇ 실행결과

[6차] 문제5) 음료수 마시기. (빈병으로 음료수를 사세요!) 실행결과

 

◇ 출처

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

COS PRO 2급 기출문제 - C언어 - 구름EDU

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

 

댓글