-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathDigits.java
More file actions
71 lines (57 loc) · 1.59 KB
/
Digits.java
File metadata and controls
71 lines (57 loc) · 1.59 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
package baseball.model;
import java.util.Arrays;
import java.util.List;
public class Digits {
private final List<Integer> numbers;
public Digits(List<Integer> numbers) {
boolean[] isExist = new boolean[10];
Arrays.fill(isExist, false);
for (int number : numbers) {
validate(isExist, number);
isExist[number] = true;
}
this.numbers = List.copyOf(numbers);
}
public CompareResult compareTo(Digits digits) {
validateSameLength(digits);
int strike = 0;
int ball = 0;
for (int i = 0; i < numbers.size(); i++) {
if (digits.isMatch(i, numbers.get(i))) {
strike++;
continue;
}
if (digits.isInside(numbers.get(i))) {
ball++;
}
}
return new CompareResult(numbers.size(), strike, ball);
}
public int getLength() {
return numbers.size();
}
private void validate(boolean[] isExist, int number) {
if (number < 1 || number > 9) {
throw new RuntimeException("1부터 9까지의 숫자가 아닙니다. 중복되지 않는 1부터 9까지의 숫자를 입력해 주세요.");
}
if (isExist[number]) {
throw new RuntimeException("중복된 숫자가 있습니다. 중복되지 않는 1부터 9까지의 숫자를 입력해 주세요.");
}
}
private boolean isInside(int target) {
for (int number : numbers) {
if (number == target) {
return true;
}
}
return false;
}
private boolean isMatch(int index, int target) {
return numbers.get(index) == target;
}
private void validateSameLength(Digits digits) {
if (digits.getLength() != numbers.size()) {
throw new RuntimeException("비교할 숫자 길이가 다릅니다.");
}
}
}