λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€(Programmers)

[c++] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - ν”Όλ‘œλ„(Level 2)

by μ•ˆμ£Όν˜• 2022. 3. 4.

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - ν”Όλ‘œλ„

XXκ²Œμž„μ—λŠ” ν”Όλ‘œλ„ μ‹œμŠ€ν…œ(0 μ΄μƒμ˜ μ •μˆ˜λ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€)이 있으며, 일정 ν”Όλ‘œλ„λ₯Ό μ‚¬μš©ν•΄μ„œ λ˜μ „μ„ νƒν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 각 λ˜μ „λ§ˆλ‹€ νƒν—˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"와 던

programmers.co.kr

 

μ½”λ“œ

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

using namespace std;

int ans = 0;

int backtracking(vector<int> visited, int explore_cnt, int curr_point, vector<vector<int>>& dungeons){
    
    for(int i=0; i<dungeons.size(); i++){
        int need_point = dungeons[i][0];
        int use_point = dungeons[i][1];
        
        if(curr_point>=need_point){
            if(!visited[i]){
                visited[i]=1;
                ans = max(ans, backtracking(visited, explore_cnt+1, curr_point - use_point, dungeons));
                visited[i]=0;
            }
            
        }
    }
    return explore_cnt;
}

int solution(int k, vector<vector<int>> dungeons) {
    vector<int>visited(50);
    backtracking(visited,0,k,dungeons);
    
    return ans;
}

 

풀이

μ™„μ „ 탐색 문제인데 ν•΄λ‹Ή λ˜μ „μ„ κ³ λ₯΄λŠ”데 μˆœμ„œκ°€ μ—†κΈ° λ•Œλ¬Έμ— λ°©λ¬Έ 처리λ₯Ό ν•΄κ°€λ©΄μ„œ λͺ¨λ“  경우의 수λ₯Ό λ”°μ Έμ•Ό ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 문제 μžμ²΄λŠ” 크게 어렡지 μ•Šμ•˜κ³  ν”ν•œ λ°±νŠΈλž™ν‚Ήμ„ μ΄μš©ν•˜λŠ” ν”ν•œ μ™„μ „ 탐색 문제 쀑 ν•˜λ‚˜μ˜€μŠ΅λ‹ˆλ‹€.

λŒ“κΈ€