GitHubSeob
C++ / 프로그래머스 / 피로도 본문
문제 |
https://programmers.co.kr/learn/courses/30/lessons/87946
코딩테스트 연습 - 피로도
XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던
programmers.co.kr
문제풀이 |
완전탐색으로 문제를 풀었다.
visited벡터를 이용해 idx번째 던전을 방문했는지 판별을 한다.
방문을 하지 않은 던전이라면 해당 던전을 무시하고 다음 던전을 탐색하기 위해 DFS를 실행한다.
또는 해당 던전을 방문할 것이라면 현재 피로도가 던전의 최소 피로도 이상인지 확인을 하고 DFS를 실행한다.
모든 던전을 방문 했다면 answer값을 최댓값으로 갱신한다.
코드 |
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>>dungeon;
vector<bool>visited;
int answer;
void DFS(int idx, int cnt, int fa) {
if (idx == dungeon.size()) {
answer = max(answer, cnt);
return;
}
for (int idx2 = 0; idx2 < dungeon.size(); ++idx2) {
if (visited[idx2] == true) continue;
visited[idx2] = true;
DFS(idx + 1, cnt, fa);
visited[idx2] = false;
if (fa >= dungeon[idx2][0]) {
visited[idx2] = true;
DFS(idx + 1, cnt + 1, fa - dungeon[idx2][1]);
visited[idx2] = false;
}
}
}
int solution(int k, vector<vector<int>> dungeons) {
dungeon = dungeons;
visited = vector<bool>(dungeon.size(), false);
DFS(0, 0, k);
return answer;
}
'Programmers > Level 2' 카테고리의 다른 글
C++ / 프로그래머스 / JadenCase 문자열 만들기 (0) | 2023.06.22 |
---|---|
C++ / 프로그래머스 / 최댓값과 최솟값 (0) | 2023.06.22 |
C++ / 프로그래머스 / 큰 수 만들기 (0) | 2022.04.23 |
C++ / 프로그래머스 / 카펫 (0) | 2022.04.23 |
C++ / 프로그래머스 / H-Index (0) | 2022.04.22 |