풀이 방법✏️
- 중복 조합을 활용한 완전 탐색을 통해 라이언이 n 번의 라운드 동안 몇 점을 맞췄는 지 결정
- 어피치와 라이언이 총 획득한 점수 계산
- 라이언이 더 많은 점수를 얻은 경우들 중 점수 차이가 최대인 경우를 구
소스 코드(feat. 알찬 주석)⌨️
import java.util.*;
class Solution {
static int[] points;
static int N, R, isWin, maxDiff;
static int[] answer;
public int[] solution(int n, int[] info) {
N = 11;
R = n;
points = new int[R];
answer = new int[N];
combination(0, 0, info);
if(isWin == 0) {
return new int[]{-1};
}
return answer;
}
private static void combination(int cnt, int start, int[] info) {
if(cnt == R) {
calWinner(info);
return;
}
for(int i=start; i<N; i++) {
points[cnt] = i;
combination(cnt+1, i, info);
points[cnt] = 0;
}
}
private static void calWinner(int[] apeachInfo) {
int apeach = 0;
int ryan = 0;
int[] ryanInfo = new int[N];
for(int i=0; i<R; i++) {
ryanInfo[10 - points[i]]++;
}
for(int i = 0; i<N; i++) {
if(apeachInfo[i] == 0 && ryanInfo[i] == 0) {
continue;
}
if(apeachInfo[i] >= ryanInfo[i]) {
apeach += 10 - i;
continue;
}
if(apeachInfo[i] < ryanInfo[i]) {
ryan += 10 - i;
}
}
int diff = ryan - apeach;
if(diff > maxDiff) {
isWin = 1;
answer = ryanInfo;
maxDiff = diff;
}
}
}