dfs방식으로 풀었다. 모든 경우의 수들중에서 방문횟수를 갱신하는 방법이다. 기존 dfs와는 형태가 조금 다르긴하지만 크게 어렵지않다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int answer;
vector<bool> vis(8,false);
void dfs(int k, vector<vector<int>> dungeons)
{
for(int i=0;i<dungeons.size();i++)
{//모든 던전을 방문 할수있다면 방문
if (!vis[i] && k >= dungeons[i][0])
{//조건을 만족하고 방문 하지 않았다면
vis[i] = true;
dfs(k-dungeons[i][1], dungeons);
vis[i] = false;
}
}
int cleared = 0;
for(auto c : vis) if(c) cleared++;//클리어한 던전개수 체크
answer = max(answer, cleared);//갱신
}
int solution(int k, vector<vector<int>> dungeons)
{
dfs(k, dungeons);
return answer;
}