알고리즘/c++ 프로그래머스
[프로그래머스 피로도] c++ (문제풀이, 개념, 코드)
말린밴댕이_공부
2023. 5. 17. 14:52
반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/87946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
풀이 및 코드
dfs를 이용하여 문제를 풀었습니다.
dfs를 이용하여 풀었는데 그것이 만약 유저가 탐험할 수 있는 최대의 던전의 수 보다 크다면 갱신을 하는 형태로 진행하였습니다.
/*
일정 피로도를 사용해서
최소 필요 피로도 소모 피로도
dungeons -> 최소필요 피로도, 소모 피로도
k - > 현재 피로도
던전의 개수 1이상 8이하
*/
#include <string>
#include <vector>
using namespace std;
int visited[8] ={0,};
int answer = 0;
void dfs(int cnt, int energy, vector<vector<int>> dungeons,int *minTired, int *useTired);
int solution(int k, vector<vector<int>> dungeons) {
int min_tired[8];
int use_tired[8];
int num = dungeons.size();
for(int i = 0 ; i <dungeons.size();i++){
min_tired[i] = dungeons[i][0];
use_tired[i] = dungeons[i][1];
}
dfs(0,k,dungeons,min_tired,use_tired);
return answer;
}
void dfs(int cnt, int energy,vector<vector<int>> dungeons,int *minTired, int *useTired){
for(int i =0; i < dungeons.size();i++){
if(!visited[i] && minTired[i] <= energy){
visited[i] = true;
dfs(cnt+1,energy - useTired[i], dungeons, minTired, useTired);
visited[i] = false;
}
}
answer = answer > cnt ? answer : cnt;
}
반응형