본문 바로가기

cospro2급/cospro_6차

2021-05-30 / 7번 문제

의자와 책상을 사고 싶어요.

 

문제 설명

예산 내에서 의자와 책상을 하나씩 사려고 한다. 이때, 의자와 책상 가격의 합이 가장 크게 사려고 한다.

예를 들어, 돈을 7원을 가지고 있고 의자의 가격이 [2, 5], 책상의 가격이 [4, 3, 5]일 때, 첫번째 의자와 세번째 책상을 구매하면 가격의 합이 7원이고, 이때 의자와 책상 가격의 합이 가장 크다.

예산 money, 의자의 가격이 담긴 배열 chairs, chairs의 길이 chairs_len, 책상의 가격이 담긴 배열 desks, desks의 길이 desks_len이 매개변수로 주어진다. 이때 예산으로 감당할 수 있는 의자와 책상 가격 합의 최댓값을 return 하는 solution 함수를 완성한다. 

 

매개변수 설명

예산 money, 의자의 가격이 담긴 배열 chairs, chairs의 길이 chairs_len, 책상의 가격이 담긴 배열 desks, desks의 길이 desks_len이 매개변수로 주어진다.

   예산 money는 1 이상 1000 이하인 자연수이다.

   의자와 책상의 가격은 1 이상 1000 이하인 자연수이다.

   chairs_len과 desks_len은 1 이상 100 이하이다.

 

return 값 설명 

의자와 책상을 하나씩 살때, 예산으로 감당할 수 있는 의자와 책상 가격 합의 최댓값을 return 한다.

   단, 가지고 있는 금액으로 의자와 책상을 하나씩 살 수 없는 경우에는 0을 return 한다.

 

예시

 

예시 설명

예제 1)

돈을 7원을 가지고 있고 의자의 가격이 [2, 5], 책상의 가격이 [4, 3, 5]일 때, 첫번째 의자와 세번째 책상을 구매하면 가격의 합이 7원이고, 이때 의자와 책상 가격의 합이 가장 크다.

예제 2)

3원짜리 의자와 5원짜리 책상을 구매하면 8원이 든다. 이는 예산 7원을 초과하기 때문에 0을 return 한다.

 

코드 설명

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int money, int chairs[], int chairs_len, int desks[], int desks_len) {
    int answer = 0;	//가격의 최댓값

    for(int i = 0; i < chairs_len; i++) {
      for(int j = 0; j < desks_len; j++) {
        int price = chairs[i]+desks[j];	//가격은 책상과 의자의 수를 더한값
        if(answer < price && money>=price)
          answer = price;	
    	}
    }

    return answer;
}

int main() {
	int money1 = 7;
	int chairs1[] = {2, 5};
	int chairs_len1 = 2;
	int desks1[] = {4, 3, 5};
	int desks_len1 = 3;
	int ret1 = solution(money1, chairs1, chairs_len1, desks1, desks_len1);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);

	int money2 = 7;
	int chairs2[] = {3};
	int chairs_len2 = 1;
	int desks2[] = {5};
	int desks_len2 = 1;
	int ret2 = solution(money2, chairs2, chairs_len2, desks2, desks_len2);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

 

    for(int i = 0; i < chairs_len; i++) {
      for(int j = 0; j < desks_len; j++) {
        int price = chairs[i]+desks[j]; 
        if(answer < price && money>=price)
          answer = price;
     }
    }

먼저 의자 배열과 책상 배열을 반복문으로 돌려 나올 수 있는 모든 조합을 찾는다. 이때 의자와 책상의 합이 큰 경우와 예산보다 작거나 같은 경우를 찾아 answer에 넣는다. 

'cospro2급 > cospro_6차' 카테고리의 다른 글

2021-05-31 / 9번 문제  (0) 2021.05.31
2021-05-30 / 6번 문제  (0) 2021.05.30
2021-05-30 / 5번 문제  (0) 2021.05.30
2021-05-30 / 10번 문제  (0) 2021.05.30
2021-05-29 / 8번 문제  (0) 2021.05.30