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

 

https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

해결전략

 

DFS

완전 탐색

 


 

코드

 

#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int maxCnt; // 방문 가능한 최대 던전 개수
int ch[8]; // 각 던전에 대한 방문 여부 체크 배열

// x: 현재 에너지, dungeons: 각각의 던전 정보 (에너지 요구량, 소모량), cnt: 현재까지 방문한 던전의 개수
void DFS(int x, vector<vector<int>>& dungeons, int cnt)
{    
    if (cnt > maxCnt) // 만약 현재까지 방문한 던전의 개수가 이전 최대치보다 크다면
        maxCnt = cnt; // 최대치 업데이트
    
    for (int i = 0; i < dungeons.size(); i++) // 모든 던전에 대해서 반복
    {   // 아직 방문하지 않은 던전이며, 현재 에너지가 해당 던전의 에너지 요구량보다 크거나 같다면
    	if (ch[i] == 0 && x >= dungeons[i][0]) {
            ch[i] = 1;
            DFS(x - dungeons[i][1], dungeons, cnt + 1);
            ch[i] = 0;
        }
    }
}

int solution(int k, vector<vector<int>> dungeons)
{
    DFS(k, dungeons, 0);

    int answer = maxCnt;

    return answer;
}