프로그래머스 양궁대회 java

정상민·2023년 11월 2일

문제링크

문제 접근

  • 순열 느낌으로 재귀 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분
profile
안녕하세요! 개인 공부를 꾸준히 기록하는 공간입니다.

0개의 댓글