[프로그래머스]

프로그래머스 양궁대회 C++

Hevton 2023. 9. 19. 13:52
반응형

 

라이언이 점수를 획득하려면 어피치가 쏜 것보다 무조건 하나이상 더 쏴야한다.

나는 그 점을 생각하여 풀었다.

 

근데 추천 수를 가장 많이 받은 다른 사람의 풀이를 확인해보니, 그냥 N 발을 전체 다 하나씩 탐색하는 경우로 푸셨다.

아마 내 풀이보다는 오래 걸릴 것으로 생각된다..!!

#include <string>
#include <vector>

using namespace std;

vector<int> lions(11, 0); // lion의 과녁
vector<int> ans;

int maxGap;

// shot : 남은 발 수
void dfs(int n, vector<int>& info, int index, int shot, int scoreLion, int scoreAppeach) {
    
    if(index < 0) {
        
        int gap = scoreLion - scoreAppeach;
        
        if(maxGap < gap) {
            maxGap = gap;
            ans = lions;
            
            if(shot > 0) // 남은 발 수가 있으면 0점에 채워넣음
                ans[10] = shot;
        }
        return;
    }
    
    // 맞추기
    if(shot >= (info[index] + 1)) {
        lions[index] = info[index] + 1;
        dfs(n, info, index - 1, (shot - (info[index] + 1)), scoreLion + (10 - index), scoreAppeach);
        lions[index] = 0;
    }

    // 안맞추고 넘기기
    if(info[index] > 0) {
        dfs(n, info, index - 1, shot, scoreLion, scoreAppeach + (10 - index));
    } else {
        dfs(n, info, index - 1, shot, scoreLion, scoreAppeach);
    }
    
}

vector<int> solution(int n, vector<int> info) {
    vector<int> answer;
    
    dfs(n, info, 9, n, 0, 0);
        
    if(ans.empty()) return {-1}; else return ans;
}

 

반응형