๋ฉ๋ฆฌ๋ ์ฌ๋ฆ์ ๋ง์ ๋ฌด์ธ๋๋ก ์ฌํ์ ๊ฐ๊ธฐ ์ํด ์ง๋๋ฅผ ๋ณด๊ณ ์์ต๋๋ค. ์ง๋์๋ ๋ฐ๋ค์ ๋ฌด์ธ๋๋ค์ ๋ํ ์ ๋ณด๊ฐ ํ์๋ผ ์์ต๋๋ค. ์ง๋๋ 1 x 1ํฌ๊ธฐ์ ์ฌ๊ฐํ๋ค๋ก ์ด๋ฃจ์ด์ง ์ง์ฌ๊ฐํ ๊ฒฉ์ ํํ์ด๋ฉฐ, ๊ฒฉ์์ ๊ฐ ์นธ์๋ 'X' ๋๋ 1์์ 9 ์ฌ์ด์ ์์ฐ์๊ฐ ์ ํ์์ต๋๋ค. ์ง๋์ 'X'๋ ๋ฐ๋ค๋ฅผ ๋ํ๋ด๋ฉฐ, ์ซ์๋ ๋ฌด์ธ๋๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋, ์, ํ, ์ข, ์ฐ๋ก ์ฐ๊ฒฐ๋๋ ๋ ๋ค์ ํ๋์ ๋ฌด์ธ๋๋ฅผ ์ด๋ฃน๋๋ค. ์ง๋์ ๊ฐ ์นธ์ ์ ํ ์ซ์๋ ์๋์ ๋ํ๋ด๋๋ฐ, ์, ํ, ์ข, ์ฐ๋ก ์ฐ๊ฒฐ๋๋ ์นธ์ ์ ํ ์ซ์๋ฅผ ๋ชจ๋ ํฉํ ๊ฐ์ ํด๋น ๋ฌด์ธ๋์์ ์ต๋ ๋ฉฐ์น ๋์ ๋จธ๋ฌผ ์ ์๋์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ค ์ฌ์ผ๋ก ๋๋ฌ ๊ฐ์ง ๋ชป ์ ํ ๋ฉ๋ฆฌ๋ ์ฐ์ ๊ฐ ์ฌ์์ ์ต๋ ๋ฉฐ์น ์ฉ ๋จธ๋ฌผ ์ ์๋์ง ์์๋ณธ ํ ๋๋ฌ๊ฐ ์ฌ์ ๊ฒฐ์ ํ๋ ค ํฉ๋๋ค.
์ง๋๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด maps
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ์ฌ์์ ์ต๋ ๋ฉฐ์น ์ฉ ๋จธ๋ฌด๋ฅผ ์ ์๋์ง ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ด์ return ํ๋ solution
ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ง์ฝ ์ง๋ผ ์ ์๋ ๋ฌด์ธ๋๊ฐ ์๋ค๋ฉด -1์ ๋ฐฐ์ด์ ๋ด์ return ํด์ฃผ์ธ์.
maps
์ ๊ธธ์ด โค 100maps[i]
์ ๊ธธ์ด โค 100maps[i]
๋ 'X' ๋๋ 1 ๊ณผ 9 ์ฌ์ด์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์
๋๋ค.maps | result |
---|---|
["X591X","X1X5X","X231X", "1XXX1"] | [1, 1, 27] |
["XXX","XXX","XXX"] | [-1] |
์ ๋ฌธ์์ด์ ๋ค์๊ณผ ๊ฐ์ ์ง๋๋ฅผ ๋ํ๋
๋๋ค.
์ฐ๊ฒฐ๋ ๋
๋ค์ ๊ฐ์ ํฉ์น๋ฉด ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ
์ ๋ฌธ์์ด์ ๋ค์๊ณผ ๊ฐ์ ์ง๋๋ฅผ ๋ํ๋
๋๋ค.
์ฌ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ -1์ ๋ฐฐ์ด์ ๋ด์ ๋ฐํํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ์ ๋ฒ์ ํ์๋ ๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ ๋ฌธ์ ๊ฐ ์๊ฐ์ด ๋์ dfs๋ก ํ์ด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.๐ค
๋ง์ฐฌ๊ฐ์ง๋ก, 2์ฐจ์ ๋ฐฐ์ด์ ์ง๋๋ฅผ ์ ์ฅํด ์ธ๋ฑ์ค๋ฅผ ์ญ ์ํ ํ๋ค๊ฐ,
๋
์ ๋ฐ๊ฒฌํ๋ฉด, ํด๋น ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ์ข์ฐ๋ฅผ ์ดํ ๋ค, ์ฐ์๋ ๋
์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๋ฐ๋ณตํด ์ฃผ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์, ์ฐ์๋ ๋ ์ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ๋ ์ ์์กด ์ผ์ ์ ๋ณด๋ฅผ ๋ํด๋๊ฐ๋ฉฐ ๋ฌด์ธ๋์ ์ต์ข ์์กด ์ผ์๋ฅผ ๊ตฌํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๊ตฌํ์ ์์ด์๋ intํ ๋ณ์๋ฅผ ํ๋ ๋ง๋ค์ด ์ฐ์๋ ๋ ์ ์์น๋ก ์ฎ๊ฒจ๊ฐ ๋๋ง๋ค ํด๋น ์์น์ ์์๊ฐ์ ๋ํด๋๊ฐ๋ ๋ก์ง๋ง ์ถ๊ฐํด ์ฃผ๋ฉด ๋๋ค.
import java.util.*;
class Solution {
static int[][] map; // ์ง๋
static boolean[][] visited; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
static int dayCount; // ํด๋น ๋
์์์ ์์กด ์ผ์
static int[][] step = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // ์ํ์ข์ฐ ์ด๋
static int sizeRow; // ์ง๋ ๊ฐ๋ก ํฌ๊ธฐ
static int sizeCol; // ์ง๋ ์ธ๋ก ํฌ๊ธฐ
public static int[] solution(String[] maps) {
int[] answer;
sizeRow = maps[0].length();
sizeCol = maps.length;
map = new int[sizeCol][sizeRow];
visited = new boolean[sizeCol][sizeRow];
ArrayList<Integer> days = new ArrayList<>(); // ๋ฌด์ธ๋์์์ ์ด ์์กด ์ผ์
// ์ง๋ ์ ๋ณด ์
๋ ฅ
for (int i = 0; i < sizeCol; i++) {
String temp = maps[i];
for (int j = 0; j < sizeRow; j++) {
if (temp.charAt(j) == 'X') {
map[i][j] = 0;
}
else {
map[i][j] = Integer.parseInt(Character.toString(temp.charAt(j)));
}
}
}
for (int i = 0; i < sizeCol; i++) {
for (int j = 0; j < sizeRow; j++) {
if (!visited[i][j] && map[i][j] != 0) {
dayCount = 0;
dfs(i, j); // dfs ํธ์ถ
days.add(dayCount); // ์ด ์์กด ์ผ์ ์ ์ฅ
}
}
}
// ์ฐพ์ ๋ฌด์ธ๋๊ฐ ์๋ค๋ฉด -1 ์ ์ฅ
if (days.isEmpty()) {
answer = new int[1];
answer[0] = -1;
}
// ์ฐพ์ ๋ฌด์ธ๋๊ฐ ์๋ค๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ์์กด ์ผ์ ์ ์ฅ
else {
answer = new int[days.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = days.get(i);
}
Arrays.sort(answer);
}
return answer;
}
public static void dfs(int a, int b) {
visited[a][b] = true; // ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์
dayCount += map[a][b]; // ์์กด ์ผ์ ์ฆ๊ฐ
// ์ํ์ข์ฐ ํ์
for (int i = 0; i < 4; i++) {
// ์ด๋ํ ์ขํ ๊ฐฑ์
int newX = a + step[i][0];
int newY = b + step[i][1];
// ์ด๋ํ ์ขํ๊ฐ ์ง๋ ์์ ์๊ณ , ๋
์ด ์ด์ด์ ธ ์๊ณ , ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ผ๋ฉด
if (newX >= 0 && newX < sizeCol && newY >= 0 && newY < sizeRow && map[newX][newY] != 0 && !visited[newX][newY]) {
dfs(newX, newY); // ํด๋น ์ขํ๋ก ์ด๋
}
}
}
}
์ง๋์ ๊ฐ๋ก, ์ธ๋ก ํฌ๊ธฐ๋ฅผ ๊ตฌํด์ค ๋ค, ํด๋น ํฌ๊ธฐ์ ์ผ์นํ๋ 2์ฐจ์ ๋ฐฐ์ด map
์ ์์ฑํด์ฃผ๊ณ , maps
๋ฐฐ์ด ์ค "X"
๋ฅผ ์ ์ธํ ์ซ์๋ง ์ง๋์ ์ ์ฅํ๋ค.
map[0][0]
๋ถํฐ ์ง๋์ ๋๊น์ง ์ํํ๋ฉด์, ๋ฐฉ๋ฌธํ ์ ์ด ์๊ณ , ์์๊ฐ 0์ด ์๋ ์์น์์ dfs๋ฅผ ํธ์ถํ๋ค. ์ด ๋, ํด๋น ๋ฌด์ธ๋์ ์ด ์์กด ์ผ์๋ฅผ ์ ์ฅํ๋ dayCount
๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํ๋ค.
ํด๋น ๋ ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ํ๊ณ , ์ด ์์กด ์ผ์๋ฅผ ํด๋น ๋ ์ ์์กด ์ผ์๋งํผ ์ฆ๊ฐ์ํจ๋ค.
์ํ์ข์ฐ ์ด๋ ์ ๋ณด๋ฅผ ์ ์ฅํ 2์ฐจ์ ๋ฐฐ์ด step
์ ์ด์ฉํด ์ขํ๋ฅผ ๊ฐฑ์ ํ๋ค.
์ด๋ํ ์ขํ๊ฐ ์ง๋ ์์ ์๊ณ , ๋ ์ด ์ด์ด์ ธ ์๊ณ , ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ผ๋ฉด, ํด๋น ์ขํ๋ก ์ด๋ํด dfs๋ฅผ ์ฌ๊ท ํธ์ถํ๋ค.
์ง๋ ํ์์ด ๋๋๋ฉด, ์ฐพ์ ๋ฌด์ธ๋์ ์ด ์ผ์๋ฅผ ์ ์ฅํ๋ days
๋ฅผ ํ์ธํด, ์ฐพ์ ๋ฌด์ธ๋๊ฐ ์๋ค๋ฉด answer
์ -1์ ์ ์ฅํ๊ณ , ์ฐพ์ ๋ฌด์ธ๋๊ฐ ์๋ค๋ฉด ์์กด ์ผ์๋ค์ answer
์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅํ๋ค.
๐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊น๋ํ๊ณ ๋ฉ์ง ์ค๋ช ์ด์์ ๐๐