Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 피로도 (C++) 본문

Problem Solving

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

흑개 2021. 12. 6. 02:47

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

 

코딩테스트 연습 - 피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던

programmers.co.kr

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int k, vector<vector<int>> dungeons) {
    int answer = -1;
    vector<int> perm;
    for (int i=0; i<dungeons.size(); i++)
        perm.push_back(i);
    do{
        int tired=k;
        bool flag=false;
        for (int i=1; i<=dungeons.size(); i++){
            int order=perm[i-1];
            if (tired<dungeons[order][0]){
                answer=max(answer, i-1);
                flag=true;
                break;
            }
            tired-=dungeons[order][1];
        }
        if (!flag){
            answer=dungeons.size();     //모든 던전 탐험 가능한 경우
            break;
        }
    } while (next_permutation(perm.begin(), perm.end()));
    return answer;
}

 

순열로 모든 case를 검사하는 형태이다.

 

피로도가 기준에 충족되지 않으면 그때 비교해서 answer 값을 구한다.

 

그러나 dfs 이용해 모든 경우를 탐색할 수 있다. (참고: https://katfun.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%94%BC%EB%A1%9C%EB%8F%84)

 

시작점을 고정하고, dfs 로 탐색하면서 탐색가능한 최대값의 던전을 갱신해주는 식이다.