문제링크
문제 접근
- 순열 느낌으로 재귀 1<=n<=10 이라 가능
- 0 ≤ lion[i] ≤ info[i] + 1 로 해서 시간줄이기
- 조건 만족하는 lion 만들어지면 점수계산해서 조건만족하는거 갱신
코드
class Solution {
static int[] lion = new int[11];
static int num,max;
static int[] peach,result = new int[11];
static boolean flag = false;
public int[] solution(int n, int[] info) {
num = n;
peach = info;
recur(0,0);
int[] answer = {-1};
if(!flag) return answer;
return result;
}
public void recur(int idx,int sum){
if(sum > num) return; //n개 넘개쏘면 패스
if(idx == 11){
if(sum != num) return;// 11개까지 채웠지만 n개만큼 쏘지 않은경우는 패스
//체크
int peachSum = 0;
int lionSum = 0;
for(int i=0;i<11;i++){
if(peach[i]==0 && lion[i]==0) continue;
if(peach[i] >= lion[i]) peachSum += 10-i;
else lionSum += 10-i;
}
int gap = lionSum - peachSum;
if(gap > 0){
if(gap > max){
max = gap;
result = lion.clone();
flag = true;
}
else if(gap == max){
int idxx = 10;
while(true){
if(lion[idxx] > result[idxx]){
result = lion.clone();
break;
}
else if(lion[idxx] == result[idxx]){
idxx--;
continue;
}
else break;
}
}
}
return;
}
for(int i=0; i<=peach[idx]+1 ; i++){
lion[idx] = i;
recur(idx+1,sum + i);
}
}
}
결과

정리
- 점수 계산할 때 둘다 0인거 점수계산해서 디버깅함
- 순조부 느낌의 코드로 재귀 좋다, 짤 때 100퍼 확신은 안듬
- deepcopy → array.clone()
- 소요시간 약 45분