[JavaScript] 프로그래머스 - 양궁대회 (2단계)

배똥회장·2022년 9월 13일
0

📝 문제

프로그래머스 - 양궁대회 (2단계)


📝 풀이

📌 작성 코드

var answer = [-1];
var apeachInfo, count, maxScore;
function solution(n, info) {
		//전역변수로 넘기기 위해서 밖에 선언하고, 안에서 값 할당
    apeachInfo = info;
    count = n;
    maxScore = 0;

		//함수 호출
    func(Array(11).fill(0), 0, 0, 0, 0);
    
		//정답 리턴
		return answer;
}

//매개변수 : 만들고 있는 배열, 위치, 화살 수, 어피치 점수, 라이언 점수
function func(list, index, arrow, apeach, rion) {
		//만약 위치가 10이라면 (10일 경우 화살은 0점일 경우를 뜻함)
    if (index == 10) {
				//일단 화살 수를 맞춰야 하기 때문에 남은 화살은 0점에 몰아주기
        if (arrow < count) list[10] = count - arrow;
				//라이언의 점수가 어피치의 점수보다 크고, 현재 기준 가장 차이가 많이 나는 점수보다 크거나 같을 때
        if (rion-apeach > 0 && rion-apeach >= maxScore) {
						//만약 가장 차이가 많이 나는 경우는 그냥 바로 answer과 maxScore 할당
            if (rion-apeach > maxScore) {
                answer = list.slice();
                maxScore = rion-apeach;
            } else { //그렇지 않으면
                if (answer.length == 1) answer = Array(11).fill(0);
		            //0점부터 비교해서 낮은 점수를 많이 쏜 것으로 할당
                for (var i = 10; i >= 0; i--) {
                    if (list[i] > answer[i]) {
                        answer = list.slice();
                        maxScore = rion-apeach;
                        break;
                    } else if (list[i] < answer[i]) {
                        break;
                    }
                }   
            }
        }
        return;
    }
    
		//list에 그대로 입력하면 값이 변동되기 때문에 새로운 배열 생성 수 list를 깊은 복사로 할당
    var nextList = list.slice();
		//현 위치의 화살은 어피치가 쏜 화살보다 1개 더 많게 설정
    nextList[index] = apeachInfo[index] + 1;
		//만약 쏜 화살 수가 쏴야할 화살보다 작거나 같으면 라이언이 점수를 얻는 식으로 해서 함수 호출
    if (arrow + nextList[index] <= count) func(nextList, index+1, arrow + nextList[index], apeach, rion+10-index);
    
		//라이언이 점수를 얻지 않는 경우도 호출
    func(list, index+1, arrow, apeachInfo[index] == 0 ? apeach : apeach+10-index, rion);
}

📌 결과

profile
어쩌면 개발자

0개의 댓글