어흥

[프로그래머스] 피로도 (C++) 본문

알고리즘/프로그래머스

[프로그래머스] 피로도 (C++)

라이언납시오 2021. 11. 4. 18:51
728x90
반응형

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/87946

 

코딩테스트 연습 - 피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던

programmers.co.kr

1. 주의할 점

- 최소 피로도 ≥ 소모 피로도

 

2. 구현

- 최소 피로도를 needEnergy[] 배열에 담는다

- 소모 피로도를 useEnergy[] 배열에 담는다

- check[] 배열을 통해 던전 탐험 유무를 체크한다

- DFS()를 수행하며 남은 피로도가 최소 피로도 이상이며, 탐험하지 않은 던전인 경우, 탐험을 한다

#include <string>
#include <vector>
#include <cmath>
using namespace std;
int needEnergy[8];
int useEnergy[8];
bool check[8]={false,};
int num;
int result=0;

void dfs(int cnt, int remain){
    for(int i=0;i<num;i++){
        if(!check[i] && needEnergy[i]<=remain){
            check[i]=true;
            dfs(cnt+1,remain-useEnergy[i]);
            check[i]=false;
        }
    }
    result = max(result,cnt);
    return;
}

int solution(int k, vector<vector<int>> dungeons) {
    int answer = -1;
    num = dungeons.size();
    for(int i=0;i<num;i++){
        needEnergy[i] = dungeons[i][0];
        useEnergy[i] = dungeons[i][1];
    }
    dfs(0,k);
    return answer = result;
}
728x90
반응형
Comments