-
Notifications
You must be signed in to change notification settings - Fork 738
Expand file tree
/
Copy pathLadder.java
More file actions
66 lines (52 loc) · 2.32 KB
/
Ladder.java
File metadata and controls
66 lines (52 loc) · 2.32 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
package ladder.domain;
import ladder.exception.ContinuousHorizontalLineException;
import ladder.exception.NotEnoughVerticalLinesException;
import java.util.Set;
public class Ladder {
static final int MINIMUM_VERTICAL_LINES_QUANTITY = 2;
private final VerticalLines verticalLines;
private final HorizontalLines horizontalLines;
public Ladder(VerticalLines verticalLines, HorizontalLines horizontalLines) {
checkVerticalLines(verticalLines);
checkValidLines(verticalLines, horizontalLines);
this.verticalLines = verticalLines;
this.horizontalLines = horizontalLines;
}
private void checkVerticalLines(VerticalLines verticalLines) {
if (verticalLines.getSize() < MINIMUM_VERTICAL_LINES_QUANTITY) {
throw new NotEnoughVerticalLinesException(String.format("세로선 갯수 : %d", verticalLines.getSize()));
}
}
private void checkValidLines(VerticalLines verticalLines, HorizontalLines horizontalLines) {
for (int i = 0; i < horizontalLines.getMaxHeight(); i++) {
Set<HorizontalLine> horizontalLineSet = horizontalLines.getHorizontalLineSetByHeight(i);
checkExistContinuousHorizontalLinesOnSameHeight(verticalLines, horizontalLineSet);
}
}
private void checkExistContinuousHorizontalLinesOnSameHeight(VerticalLines verticalLines, Set<HorizontalLine> horizontalLineSet) {
verticalLines.getVerticalLineSet()
.forEach(verticalLine ->
checkConnectingWithManyHorizontalLines(verticalLine, horizontalLineSet)
);
}
private void checkConnectingWithManyHorizontalLines(VerticalLine verticalLine, Set<HorizontalLine> horizontalLineSet) {
if (horizontalLineSet.stream()
.filter(it -> it.isConnected(verticalLine))
.count() > 1
) {
throw new ContinuousHorizontalLineException(String.format("중복되는 세로선 위치 : %d", verticalLine.getIndex()));
}
}
public int getHeight() {
return horizontalLines.getMaxHeight();
}
public int getWidth() {
return verticalLines.getMaxWidth();
}
public VerticalLines getVerticalLines() {
return verticalLines;
}
public HorizontalLines getHorizontalLines() {
return horizontalLines;
}
}