피로도

magicdrill·2025년 3월 12일
0

피로도

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int max_count = 0;

void dfs(int k, vector<vector<int>>& dungeons, vector<bool>& visited, int count) {
    max_count = max(max_count, count); // 최대 던전 개수 갱신
    cout << max_count << "\n";

    for (int i = 0; i < dungeons.size(); i++) {
        if (!visited[i] && k >= dungeons[i][0]) { // 방문 X && 최소 피로도 만족
            visited[i] = true;   // 방문 처리
            dfs(k - dungeons[i][1], dungeons, visited, count + 1); // 탐험 진행
            visited[i] = false;  // 백트래킹 (복구)
        }
    }
}

int solution(int k, vector<vector<int>> dungeons) {
    int answer = -1;
    
    // k = 현재 피로도
    //deongeons[i][0] = 최소 필요 피로도
    //deongeons[i][1] = 소모 피로도
    
    // dungeons.size()만큼의 인덱스 0부터 dungeons.size()-1까지의 조합을 구해서
    // 필요 피로도, 소모 피로도 조건에 맞는 최대 개수 구하기?
    
    vector<bool> visited(dungeons.size(), false); // 방문 체크
    dfs(k, dungeons, visited, 0); // 탐색 시작
    answer = max_count;
    
    return answer;
}

0개의 댓글