프로그래머스 Level 2 - 양궁대회
📌 문제 설명
📌 생각한 풀이 방법
- 0포인트 부터 나올수 있는 모든 경우를 탐색한다
1-1. 라이언이 이겨 포인트를 얻는 경우
1-2. 어피치가 이겨 포인트를 얻는 경우
1-3. 둘다 점수를 얻지 못하는 경우
- 10포인트까지 모든 경우를 탐색한 후, 해당 경우의 포인트 차이가 maxCount보다 큰 경우,
해당 포인트 차이를 maxCount에 저장하고, 해당 경우를 answer에 저장한다.
📌 풀이
function solution(n, info) {
let answer = Array(11).fill(0);
let maxCount = 0;
function findMaxPoint(apeachCount, ryanCount, usedShots, point, arr) {
if (n < usedShots) return;
if (point > 10) {
let diff = ryanCount - apeachCount;
if (maxCount < diff) {
arr[10] = n - usedShots;
maxCount = diff;
answer = arr;
}
return;
}
if (n > usedShots) {
let current = [...arr];
current[10 - point] = info[10 - point] + 1;
findMaxPoint(
apeachCount,
ryanCount + point,
usedShots + info[10 - point] + 1,
point + 1,
current
);
}
if (info[10 - point] > 0) {
findMaxPoint(apeachCount + point, ryanCount, usedShots, point + 1, arr);
} else {
findMaxPoint(apeachCount, ryanCount, usedShots, point + 1, arr);
}
}
findMaxPoint(0, 0, 0, 0, answer);
return maxCount <= 0 ? [-1] : answer;
}