본문 바로가기
알고리즘/programmers

2022 KAKAO BLIND RECRUITMENT / 양궁대회

by 유이얼 2022. 10. 3.

https://school.programmers.co.kr/learn/courses/30/lessons/92342

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
#include <vector>

using namespace std;

int calcScore(int n, int state, vector<int> &info, vector<int> &v) {
    int score = 0;
    for (int i = 0; i < 10; ++i) {
        if (state & (1 << i)) {
            n -= info[i] + 1;
            if (n < 0) return -1;
            score += 10 - i;
            v[i] = info[i] + 1;
        }
        else {
            v[i] = 0;
            if (info[i]) score -= 10 - i;
        }
    }

    v[10] = n;
    return score;
}


vector<int> solution(int n, vector<int> info) {
    vector<int> ans(11);
    int result = 0;

    for (int i = 0; i < 1024; ++i) {
        vector<int> v(11);
        int score = calcScore(n, i, info, v);

        if (result < score) {
            result = score;
            ans = v;
        }
        else if (result == score) {
            for (int j = 10; j >= 0; --j) {
                if (ans[j] == v[j]) continue;
                if (ans[j] < v[j]) ans = v;
                break;
            }
        }
    }

    if (result > 0) return ans;
    return { -1 };
}