From 18f05f6e17e77d1bdb39ee02994289a39363352d Mon Sep 17 00:00:00 2001 From: Jonghwan Lee <123362165+0224LJH@users.noreply.github.com> Date: Fri, 24 Oct 2025 23:34:45 +0900 Subject: [PATCH] =?UTF-8?q?[20251024]=20PGM=20/=20Lv2=20/=20=EC=96=91?= =?UTF-8?q?=EA=B6=81=20=EB=8C=80=ED=9A=8C=20/=20=EC=9D=B4=EC=A2=85?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\352\266\201\353\214\200\355\232\214.md" | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 "0224LJH/202510/24 PGM \354\226\221\352\266\201\353\214\200\355\232\214.md" diff --git "a/0224LJH/202510/24 PGM \354\226\221\352\266\201\353\214\200\355\232\214.md" "b/0224LJH/202510/24 PGM \354\226\221\352\266\201\353\214\200\355\232\214.md" new file mode 100644 index 00000000..bdab0708 --- /dev/null +++ "b/0224LJH/202510/24 PGM \354\226\221\352\266\201\353\214\200\355\232\214.md" @@ -0,0 +1,72 @@ +```java +import java.io.*; +import java.util.*; + +class Solution { + // 각 과녁판 점수를 얻냐, 못얻냐 -> 2^10 == 1024가지. 다 해보면 끝. + static boolean[] win = new boolean[11]; + static int[] ans = {-1}; + static int largestDiff = 0; + static int total; + static int[] target; + + + public int[] solution(int n, int[] info) { + total = n; + int[] answer = {}; + target = info; + doRecursive(0); + answer = ans; + return answer; + } + + public void doRecursive(int num){ + if (num == 11){ + process(); + return; + } + + win[num] = true; + doRecursive(num+1); + win[num] = false; + doRecursive(num+1); + } + + + public void process(){ + int[] curArr = new int[11]; + int curLeft = total; + int pointDiff = 0; + + for (int i = 0; i < 10; i++){ + int point = 10 - i; + int minimum = target[i]+1; + if (!win[i]) { + if(target[i] != 0) pointDiff -= point; + continue; + } + if (curLeft < minimum)return; + curArr[i] = minimum; + curLeft -= minimum; + pointDiff += point; + + } + curArr[10] = curLeft; + + if (pointDiff > largestDiff){ + largestDiff = pointDiff; + ans = curArr; + return; + } + + if (pointDiff != 0 && pointDiff == largestDiff){ + for (int i = 10; i >= 0; i--){ + if (ans[i] == curArr[i]) continue; + if (ans[i] < curArr[i]) ans = curArr; + else return; + } + + } + } +} +```