문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int[] solution(String[] maps) {
int[] answer = {};
// 1차원 String 배열을 2차원 char 배열로 변환
char[][] map = strArrtoCharArr(maps);
boolean[][] visited = new boolean[map.length][map[0].length];
ArrayList<Integer> island = new ArrayList<>();
for(int i = 0; i < map.length; i++) {
for(int j = 0; j < map[i].length; j++) {
if(isNumber(map[i][j]) && visited[i][j] == false) {
// 현재 섬을 방문하면 그 섬과 연결된 모든 섬을 방문하고 옴
int days = UDLR(map, visited, i, j, 0);
island.add(days);
} else {
visited[i][j] = true;
}
}
}
if(island.size() == 0) {
answer = new int [1];
answer[0] = -1;
} else {
Collections.sort(island);
answer = island.stream().mapToInt(i -> i).toArray();
}
return answer;
}
// 기본 함수 구조
public void function() {
}
// 섬 주변에 다른 섬 있는지 확인
public int UDLR (char[][] map, boolean[][] visited, int i, int j, int days) {
if(0 <= i && i < map.length && 0 <= j && j < map[i].length && isNumber(map[i][j]) && visited[i][j] == false) {
days += Integer.parseInt(map[i][j] + "");
visited[i][j] = true;
// UP 변경된 i 인덱스가 map 내부에 있는가 그리고 자연수인가
days = UDLR(map, visited, i-1, j, days);
// DOWN 변경된 i 인덱스가 map 내부에 있는가 그리고 자연수인가
days = UDLR(map, visited, i+1, j, days);
// LEFT 변경된 j 인덱스가 map 내부에 있는가 그리고 자연수인가
days = UDLR(map, visited, i, j-1, days);
// RIGHT 변경된 j 인덱스가 map 내부에 있는가 그리고 자연수인가
days = UDLR(map, visited, i, j+1, days);
}
return days;
}
// char가 숫자문자인지 확인
public boolean isNumber(char c) {
if('0' <= c && c <= '9') {
return true;
} else {
return false;
}
}
// String 배열 출력
public void printString(String[] arr) {
for(String str : arr) {
System.out.println(str);
}
}
// 2차원 char 배열 출력
public void printTwoDimensionsCharArr(char[][] map) {
for(int i = 0; i < map.length; i++) {
for(int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
// 2차원 char 배열 출력
public void printTwoDimensionsBooleanArr(boolean[][] visited) {
for(int i = 0; i < visited.length; i++) {
for(int j = 0; j < visited[i].length; j++) {
System.out.print(visited[i][j]+" ");
}
System.out.println();
}
}
// String 배열 maps char 배열로 변환
public char[][] strArrtoCharArr(String[] maps) {
char[][] map = new char[maps.length][maps[0].length()];
for(int i = 0; i < maps.length; i++) {
for(int j = 0; j < maps[i].length(); j++) {
map[i][j] = maps[i].charAt(j);
}
}
return map;
}
}
Java
복사