본문 바로가기
algorithm/SW Expert Academy

수영장 - 1952

by 에어컨조아 2019. 12. 8.

문제 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpFQaAQMDFAUq&categoryId=AV5PpFQaAQMDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

코드 : 

#include <iostream>
#include <limits>
using namespace std;
 
int price[4] = { 0 };
int use[12] = { 0 };
int minPrice = INT32_MAX;
//수행되는 month
void solution(int month, int sum)
{
    //탈출조건
    if (month >= 12)
    {
        if (minPrice > sum)
        {
            minPrice = sum;
        }
        return;
    }
    if (use[month] == 0)
    {
        solution(month + 1, sum);
        return;
    }
    //분할조건
    solution(month + 1, sum + (use[month] * price[0]));
    solution(month + 1, sum + price[1]);
    solution(month + 3, sum + price[2]);
}
 
int main()
{
    int c;
    cin >> c;
 
    for (int i = 1; i <= c; i++)
    {
        //초기화
        minPrice = INT32_MAX;
 
        for (int j = 0; j < 4; j++)
        {
            cin >> price[j];
        }
        for (int k = 0; k < 12; k++)
        {
            cin >> use[k];
        }
        solution(0, 0);
        if (minPrice > price[3])
        {
            minPrice = price[3];
        }
        cout << "#" << i << " " << minPrice << "\n";
    }
    return 0;
}

1달에 5회 이용이면 1일 이용권을 5번 사용하여야 된다.

이 부분만 생각했다면 크게 어렵지 않은 문제였음.

댓글