Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

PS/프로그래머스

[프로그래머스][백트래킹] 양궁대회

by 꽁이꽁설꽁돌 2025. 9. 18.
728x90
반응형
     

목차

     

     

    문제

    https://school.programmers.co.kr/learn/courses/30/lessons/92342

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

     

    코드 구현 방향

    백트래킹 시에 마지막 종료 조건 도달 시 처리를 또 해주어야 되는 것과 양궁점수를 확인하는 로직에서 주의를 해야했던 문제이다.

    양궁점수의 차가 같을 경우 뒤부터 비교를 시작해서 rion이 더 크면 답으로 하고 멈추고 peach가 더 크면 멈추게끔 하면된다.

     

     

    코드 구현

    var answer = [-1];
    
    function solution(n, info) {
        let arr = new Array(11).fill(0);
        dfs(n, info, 0, 0, arr);
        return answer;
    }
    
    var mGap = -Infinity;
    
    function checking(n, info, arr){
        let peach = 0;
        let rion = 0;
        arr.forEach((item, idx)=>{
            if(item <= info[idx]){
                if(info[idx] !== 0){
                    peach += 10 -idx;
                }
            }else{
                rion += 10 - idx;
            }
        })
        let gap = rion - peach;
        if(gap <= 0) return;
        if( mGap < gap){
            mGap = gap;
            answer = [...arr];
        }
      else if ( mGap === gap) {
        for (let i = 10; i >= 0; i--) {
            if (arr[i] > answer[i]) {
                answer = [...arr];
                break;
            } else if (arr[i] < answer[i]) {
                break;
            }
        }
    }
        
    }
    
    function dfs(n, info, arw, cnt, arr){
        if(cnt === 10 && n >= arw){
            arr[cnt] = n - arw;
            checking(n, info, arr);
            return;
        }
        for(let i=0; i< 2; i++){
            if(i === 0){
                let canWin = info[cnt] + 1;
                if(arw + canWin > n) continue;
                arr[cnt] = canWin;
                dfs(n, info, arw+canWin, cnt+1, arr);
                arr[cnt] = 0;
            }else{
                dfs(n, info, arw, cnt+1, arr);
            }
        }
        
    }
    반응형