알고리즘/프로그래머스

[프로그래머스] 2022 KAKAO BLIND RECRUITMENT > 4. 양궁대회

재담 2022. 3. 13. 00:02

문제 원본 : https://programmers.co.kr/learn/courses/30/lessons/92342

 

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

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

programmers.co.kr

public class Solution {
    int[] answer = {-1};
    int[] ryan;
    int max;

    public int[] solution(int n, int[] info) {
        ryan = new int[11];
        solve(0, n, info);
        return answer;
    }

    public void solve(int idx, int n, int[] info) {
        if (idx == 11 || n == 0) {
            int ryanScore = 0;
            int apeachScore = 0;

            for (int i = 0; i <= 10; ++i) {
                if (ryan[i] > info[i]) {
                    ryanScore += 10 - i;
                } else if (info[i] != 0) {
                    apeachScore += 10 - i;
                }
            }

            if (ryanScore - apeachScore > max) {
                max = ryanScore - apeachScore;
                answer = ryan.clone();
            } else if (max != 0 && ryanScore - apeachScore == max) {
                for (int i = 10; i >= 0; --i) {
                    if (answer[i] < ryan[i]) {
                        answer = ryan.clone();
                        break;
                    } else if (answer[i] > ryan[i]) {
                        break;
                    }
                }
            }

            return;
        }

        if (n >= info[idx] + 1) {
            ryan[idx] = info[idx] + 1;
            solve(idx + 1, n - (info[idx] + 1), info);
        } else {
            ryan[idx] = n;
            solve(idx + 1, 0, info);
        }
        ryan[idx] = 0;

        solve(idx + 1, n, info);
    }
}

 

  • 2022 카카오 블라인드 코딩 테스트 4번
  • 백 트래킹 문제
  • 라이언이 쏠 화살은 해당 점수의 어피치가 쏜 개수 + 1 이거나 안 쏘거나 둘 중 하나
  • 신경 쓸 부분은 답이 여러 개일 경우 가장 낮은 점수를 더 많이 맞힌 경우를 리턴하는 부분