티스토리 뷰

문제 설명

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

예를 들어, 돈을 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 이상 1,000 이하인 자연수입니다.
  • 의자와 책상의 가격은 1 이상 1,000 이하인 자연수입니다.
  • chairs_len과 desks_len은 1 이상 100 이하입니다.

예시

  money chairs chairs_len desks desks_len return
예제 #1 7 [2,5] 2 [4,3,5] 3 7
예제 #2 7 [3] 1 [5] 1 0

 

 

 


 

 

 

 

주어진 코드

#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 = 		;		//빈칸
        if(answer < 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);
}

 

 

 

 

 

 

 

 

완성 코드

#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 && price<=money)
          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);
}

 

 

 

코드 분석

단계 과정
main 예산 money
의자의 가격이 담긴 배열 chairs, chairs의 길이 chairs_len
책상의 가격이 담긴 배열 desks, desks의 길이 desks_len 의 값을 각각 할당한다.

solution함수를 호출한다.
solution 의자와 책상을 하나씩 살 때, 예산으로 감당할 수 있는 의자와 책상 가격의 합의 최댓값을 넣을 변수
answer를 선언한다.
solution - for 이중 for문을 사용하여,
의자와 책상의 모든 조합을 검색한다.
for문 안에서 if문을 사용하여 의자+책상의 가격이 지정금액보다 적고, answer보다 클 때마다
answer에 price값을 할당한다.

price<=moeny 조건을 사용하여 최대 금액을 구할 수 있다.
solution 모든 반복이 종료되고, 의자와 책상 가격의 합의 최댓값 answer를 return한다.
main 결과 ret를 출력한 후 프로그램을 종료한다.

 

 

 

 

 

 


 

 

GroomEdu

 

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

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

edu.goorm.io

 

 

댓글