Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MyTestClass {
- private char target = 'O';
- private String input = "OXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXOOOOOO\n" +
- "XXXXOXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXOOOXXXXXXXX\n" +
- "XXXXXXXXXOXOXXXXXXXX\n" +
- "XXXXXXXXXOOOXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXOOXXXXXXXXXXXX\n" +
- "XXXXXXOOXXXXXXXXXXXX\n" +
- "XXXXXXXXOOXXXXXXXXXX\n" +
- "XXXXXXXXOOOOXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXO";
- @Test
- public void count() {
- String[] str = input.split("\n");
- int h = str.length;
- int w = str[0].length();
- char[][] chars = new char[h][w];
- for (int i = 0; i < h; i++) {
- char[] charsInRow = str[i].toCharArray();
- System.arraycopy(charsInRow, 0, chars[i], 0, w);
- }
- Map<Point, ArrayList<Point>> islandMap = new HashMap<>();
- for (int i = 0; i < h; i++) {
- for (int j = 0; j < w; j++) {
- char c = chars[i][j];
- if(c == target) {
- Point firstPoint = new Point(j, i);
- int iLeft = i;
- int jLeft = j - 1;
- Point left = new Point(jLeft, iLeft);
- int iTop = i - 1;
- int jTop = j;
- Point top = new Point(jTop, iTop);
- boolean addedToList = false;
- for (Point key : islandMap.keySet()) {
- ArrayList<Point> points = islandMap.get(key);
- if (points != null && (points.contains(left) || points.contains(top))) {
- points.add(firstPoint);
- addedToList = true;
- }
- }
- if (!addedToList) {
- ArrayList<Point> list = new ArrayList<>();
- list.add(firstPoint);
- islandMap.put(firstPoint, list);
- }
- }
- }
- }
- System.out.println(islandMap.keySet().size());
- int biggest = 0;
- for (List<Point> lists : islandMap.values()) {
- if (biggest <= lists.size()) {
- biggest = lists.size();
- }
- }
- System.out.println(biggest);
- }
- class Point {
- int x, y;
- @Override
- public String toString() {
- return "{" +
- "\"x\":" + x +
- ", \"y\":" + y +
- '}';
- }
- public Point(int x, int y) {
- this.x = x;
- this.y = y;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Point point = (Point) o;
- return x == point.x &&
- y == point.y;
- }
- @Override
- public int hashCode() {
- return Objects.hash(x, y);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement