728x90
🔍 아이디어
✔️ 각 점수별 점수 획득 조합 계산
✔️ 계산된 조합별 점수 차를 계산하고 디테일한 조건을 맞춰준다
- 최대 점수 차로 승리해야한다.
- 점수 차가 동일하다면 낮은 점수의 과녁을 많이 맞춘 경우의 수를 반환한다.
- 이길 수가 없다면 _!-1!_ 로 반환한다.
import java.util.*;
class Solution {
static List<int[]> permu = new ArrayList<>();
public int[] solution(int n, int[] info) {
int[] answer = {};
int[] bucket = new int[11];
int[] maxArr = new int[11];
int maxGap = 0;
getCombination(0, bucket);
for (int[] p : permu) {
int arrows = n;
int r_sco = 0;
int a_sco = 0;
int[] arr = new int[11];
for (int i = 0; i < p.length; i++) {
int isWin = p[i];
int score = 10 - i;
if (arrows - (info[i] + 1) >= 0 && isWin > 0) {
arrows -= (info[i] + 1);
r_sco += score;
arr[i] = info[i] + 1;
} else {
if (info[i] > 0) {
a_sco += score;
}
}
}
if (arrows > 0) {
arr[10] = arrows;
}
int gap = r_sco - a_sco;
if (gap == maxGap) {
for (int i = 10; i > -1; i--) {
if (arr[i] > maxArr[i]) {
maxGap = gap;
maxArr = arr;
break;
} else if (arr[i] < maxArr[i]) {
break;
}
}
} else if (gap > maxGap) {
maxGap = gap;
maxArr = arr;
}
}
if (maxGap == 0) {
maxArr = new int[] { -1 };
}
return maxArr;
}
void getCombination(int level, int[] arr) {
if (level == 11) {
// 모든 배열을 채우면
permu.add(arr);
return;
}
getCombination(level + 1, arr.clone());
arr[level] = 1;
getCombination(level + 1, arr.clone());
}
}