-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgrammers_92342.java
More file actions
76 lines (66 loc) · 2.06 KB
/
Copy pathProgrammers_92342.java
File metadata and controls
76 lines (66 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package programmers.lv2;
import java.util.Arrays;
public class Programmers_92342 {
public static void main(String[] args) {
Programmers_92342 test = new Programmers_92342();
int n = 5;
int[] info = { 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
int[] result = test.solution(n, info);
System.out.println(Arrays.toString(result));
}
int maxDiff = -1;
int[] answer = { -1 };
public int[] solution(int n, int[] info) {
int[] ryan = new int[11];
dfs(0, n, info, ryan);
return answer;
}
private void dfs(int idx, int n, int[] info, int[] ryan) {
if (idx == 10) {
ryan[10] = n; // 0점 과녁
calc(info, ryan);
ryan[10] = 0; // 0점 과녁 초기화
return;
}
// 점수 따기
int apeech = info[idx] + 1;
if (n >= apeech) {
ryan[idx] = apeech;
dfs(idx + 1, n - apeech, info, ryan);
ryan[idx] = 0;
}
// 점수 포기
dfs(idx + 1, n, info, ryan);
}
private void calc(int[] info, int[] ryan) {
int apeechTotal = 0;
int ryanTotal = 0;
for (int i = 0; i < info.length; i++) {
int apeechScore = info[i];
int ryanScore = ryan[i];
if (apeechScore == 0 && ryanScore == 0)
continue;
if (ryanScore > apeechScore)
ryanTotal += (10 - i);
else
apeechTotal += (10 - i);
}
int diff = ryanTotal - apeechTotal;
if (diff <= 0)
return;
if (diff > maxDiff) {
maxDiff = diff;
answer = ryan.clone();
} else if (diff == maxDiff) {
// 가장 낮은 점수를 많이 맞춘거
for (int i = ryan.length - 1; i >= 0; i--) {
if (ryan[i] > answer[i]) {
answer = ryan.clone();
break;
} else if (ryan[i] < answer[i]) {
break;
}
}
}
}
}