프로그래머스-양궁대회

이호영·2022년 4월 9일
0

프로그래머스-Level.2

목록 보기
35/36
class Solution {
    private int[] MaxRet;
	private int MaxScore;
    public int[] solution(int n, int[] info) {
        MaxRet = new int[11];
		MaxScore = 0;
		helper(info, n, 0, 0, 0, new int[11]);
		return MaxScore==0?new int[]{-1}:MaxRet;
    }
    public void helper(int[] info, int n, int score, int opponent, int idx, int[] arr) {
		if(idx==10) {
			if(score-opponent>=MaxScore) {
				arr[idx] = n;
				if(MaxScore<(score-opponent)) {
					// set
					setArr(arr);
					MaxScore = score-opponent;
					
				} else if(MaxScore==(score-opponent)) {
					// sort check -> set
					if(checkSort(arr)) setArr(arr);
				}
			}
			return;
		}
		// 이길떄
		if(info[idx]<n) {
			arr[idx] = info[idx]+1;
			helper(info, n-(info[idx]+1), score+(10-idx), opponent, idx+1, arr);
		}
        // 질때
        arr[idx] = 0;
		helper(info, n, score, opponent+(info[idx]>0?(10-idx):0), idx+1, arr);
		return;
	}
	
	public void setArr(int[] arr) {
		for(int i=0 ; i<=10 ; i++) {
			MaxRet[i] = arr[i];
		}
		return;
	}
	
	public boolean checkSort(int[] arr) {
		for(int i=10 ; i>=0 ; i--) {
			if(MaxRet[i]==arr[i]) {
				continue;
			} else if(MaxRet[i]<arr[i]) {
				return true;
			} else {
				break;
			}
		}
		return false;
	}
    
}

0개의 댓글