-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathNumSet.java
More file actions
64 lines (55 loc) · 1.81 KB
/
NumSet.java
File metadata and controls
64 lines (55 loc) · 1.81 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
import java.util.Random;
public class NumSet {
private int[] numArr = new int[3];
public NumSet() {
for (int i = 0; i < 3; i++)
setRandomNum(i);
}
private void setRandomNum(int idx) {
Random random = new Random();
boolean isDiff = false;
while (!isDiff) {
numArr[idx] = random.nextInt(1, 10);
isDiff = isDiffFromForward(idx);
}
}
private boolean isDiffFromForward(int idx) {
boolean isPrevDiff = true;
for (int i = 0; i < idx; i++)
isPrevDiff = isPrevDiff && (numArr[idx] != numArr[i]);
return isPrevDiff;
}
// 사용자가 '112'처럼 중복 숫자를 입력할 때
// 스트라이크와 볼이 중복 카운트되지 않도록
// 포함하는 수 카운트에서 스트라이크를 빼서 볼을 계산
public MatchResult match(int[] userArr) {
int strike = countStrike(userArr);
int ball = countContains(userArr) - strike;
return new MatchResult(strike, ball);
}
private int countStrike(int[] userArr) {
int strike = 0;
for (int i = 0; i < 3; i++)
strike += (numArr[i] == userArr[i]) ? 1 : 0; // depth 1로 만들기 위해...
return strike;
}
private int countContains(int[] userArr) {
int cnt = 0;
for (int i = 0; i < 3; i++)
cnt += contains(i, userArr) ? 1 : 0;
return cnt;
}
private boolean contains(int idx, int[] userArr) {
boolean hasNum = false;
for (int i = 0; i < 3; i++)
hasNum = hasNum || (numArr[idx] == userArr[i]);
return hasNum;
}
public static int[] convertToList(int num) {
return new int[]{
num / 100,
num / 10 % 10,
num % 10
};
}
}