알고리즘/DFS_BFS

2022 KAKAO BLIND RECRUITMENT - 양궁대회

naksnaks 2022. 6. 5.
반응형

[문제링크]

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

 

코딩테스트 연습 - 양궁대회

문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원

programmers.co.kr


[설명]

이 문제는 실제 시험에서 풀지 못하였습니다. 다른 사람들의 풀이를 보니 DFS 풀었습니다. 

1) answer를 정렬하여 가장 작은 점수가 많은 경우를 결과값으로 주어지므로 ArrayList로 선언한다.

2) dfs를 돌며 cnt가 N일 경우 apeach와 ryan의 점수를 계산한다.

3) 만약 ryan의 점수가 apeach의 점수보다 클 경우 r-a가 max보다 큰지 확인한다.

4-1) r-a가 max보다 클때 answer를 초기화 하고 ryan의 배열을 넣어준다.

5) 전부 다 돌고 answer를 정렬하여 index:0 인 경우를 출력한다.

 

 

프로그래머스 2022 KAKAO BLIND RECRUITMENT - 양궁대회 JAVA풀이

 

import java.util.*;
class Solution {
    static ArrayList<int[]> answer = new ArrayList<>();
    static int[] ryan;
    static int[] apeach;
    static int N;
    static int max = Integer.MIN_VALUE;
    
    public int[] solution(int n, int[] info) {
        ryan = new int[11];
        N=n;
        apeach = info.clone();
        DFS(0,0);
        if(answer.isEmpty())return new int[]{-1};
        Collections.sort(answer, (o1, o2) -> {
            for(int i=10;i>=0;i--){
                if(o1[i] != o2[i]) return o2[i] - o1[i];
            }
            return 0;
        });
        return answer.get(0);
    }
    
    public static void DFS(int cnt, int s){
        if(cnt==N){
            int a=0, r=0;   //apeach, ryan 점수
            for(int i=0;i<=10;i++){
                if(apeach[i]==0 && ryan[i]==0)continue;
                if(apeach[i]<ryan[i]) r += 10-i;
                else a+=10-i;
            }
            if(r>a) {
                int diff = r-a;
                if(diff>max){
                    max=diff;
                    answer.clear();
                    answer.add(ryan.clone());
                }
                else if(diff==max) answer.add(ryan.clone());
            }
        }
        else{
            for(int i=s;i<11;i++){
                ryan[i]++;
                DFS(cnt+1, i);
                ryan[i]--;
            }
        }
    }
}

 

 

 

궁금하신 부분이나 부족한 점은 댓글로 알려주시면 감사하겠습니다.

 

반응형

댓글

💲 추천 글