[프로그래머스] 양궁대회 (DFS)

Eden·2023년 7월 19일
0

문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/92342

using System;

public class Solution {           
    public int[] rarray = new int[11]; //라이언 배열
    public int[] aarray = new int[11]; // 어피치 배열(= 문제에서 info)
    public int N = 0; // 화살갯수 (문제에서 n )
    public int diff = 0; // 모든 경우의 수 점수차이 중 최댓값
    public int[] answer = new int[11];  
    public int[] solution(int n, int[] info) {

        aarray = info;
        N = n;
        dfs(0,0);
        if (diff == 0)
        {
            answer = new int[1]{-1};
        }
        return answer;
    }
    public void dfs(int n, int info)
    {
        if (n == N) //화살 모두 사용
        {
            int ascore = 0; // 어피치 스코어
            int rscore = 0; // 라이언 스코어
            //점수 계산
            for (int i = 0; i < 11; i++)
            {
                if(aarray[i] == rarray[i] && rarray[i] == 0) continue;  //** 둘 다 못쏘면 점수 반영이 되지 않아야함 
                if(aarray[i] >= rarray[i])
                {
                    ascore += 10 - i;
                }
                else
                {
                    rscore += 10 - i;
                }
            }
            //점수 차가 갱신되면 정답 배열을 바꿔줘야함
            if ( diff < rscore - ascore)
            {

                diff = rscore - ascore;
                for (int i = 0; i< 11; i++)
                    answer[i] = rarray[i]; 
            }
            // 만약 기존 점수차값과 같으면 낮은점수를 많이쏜 배열로 바꾸어 줘야함
            else if (diff == rscore - ascore )
            {
                for (int j = 0; j < 11 ; j++)
                {
                    if(answer[10-j] < rarray[10-j])
                    {
                        for (int i = 0; i< 11; i++)
                            answer[i] = rarray[i]; 
                        break;
                    }
                    else if(answer[10-j] > rarray[10-j]) // ** 만약 기존 정답이 더 낮은 점수를 많이 쐇으면 루프를 빠져 나와야함 (갱신하면 안됨) 8,18번 오답 부분 
                        break;
                }
            }
        }
        for (int i = info; i < 11; i++)
        {
            if(aarray[i] >= rarray[i])
            {
                rarray[i]++;
                dfs(n+1,i);
                rarray[i]--;
            }
        }
    
            
    }
}
profile
주섬주섬..

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

너무 좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기