๐ ๋ฌธ์ ๋งํฌ
๐ ํ์ด ๊ณผ์
- DFS ๋ฅผ ์ด์ฉํ ๊ทธ๋ํ ์ ํ์ ๋ฌธ์ ์
๋๋ค. (์ฌ๊ท๋ฅผ ์ด์ฉํ DFS๋ก ํ์์ต๋๋ค.)
- ๋ค๋ฅธ ๊ทธ๋ํ ๋ฌธ์ ์์ ์ฐจ์ด๋ฅผ ๋ณด์๋ฉด, ๋๋์ ์์ ์๋ฅผ ๋งค๋ฒ ํ์ธํ์ฌ ๊ณ์ฐ๋ ๊ฐ์ ๊ตฌํด์ผ ํฉ๋๋ค.
- ์ด๋ฅผ ์ํด, dfs() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ '.', 'v', 'o' ์ด์ด์ผ ํ๋ฉฐ ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด์ด์ผ ํฉ๋๋ค.
- dfs() ๋ฉ์๋๊ฐ ๋๋ ๋๋ง๋ค ๋๋์ ์๊ฐ ์์ ์ ์ด์์ผ ๊ฒฝ์ฐ์๋ ์์ 0์ด ๋๊ณ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ์๋ ๋๋๊ฐ 0์ด ๋ฉ๋๋ค.
- ์ด๋ ๊ฒ ๋จ์ ๊ฐ์ ๊ฐ๊ฐ์ ์ ์ฒด ๋ณ์์ ๋ํด์ค๋๋ค.
- ๊ธฐ์กด์ ๋ฌธ์ ์ ๋ฌ๋ฆฌ ์ถ๊ฐํด์ผํ ์กฐ๊ฑด๊ณผ, ๊ณ์ฐ ๋ถ๋ถ์ ๋ํด์ ์กฐ๊ธ๋ง ๋ ์ ๊ฒฝ์ฐ๋ฉด ์ถฉ๋ถํ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๐ป ์ฝ๋
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static char[][] arr;
static boolean[][] visited;
static int r,c,totalW,totalS, wolf, sheep;
static int[] dx = {-1,0,1,0};
static int[] dy = {0,-1,0,1};
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuffer sb = new StringBuffer();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
totalS = 0;
totalW = 0;
arr = new char[r][c];
visited = new boolean[r][c];
for(int i = 0; i < r; i++){
String input = br.readLine();
for(int j = 0; j< c; j++){
arr[i][j] = input.charAt(j);
}
}
for(int i = 0; i< r; i++){
for(int j = 0; j< c; j++){
wolf = 0;
sheep = 0;
if(!visited[i][j]) {
if(arr[i][j] == 'v' || arr[i][j] == '.' || arr[i][j] == 'o') {
solve(i, j);
}
}
if(sheep > wolf){
wolf = 0;
}else{
sheep = 0;
}
totalW += wolf;
totalS += sheep;
}
}
sb.append(totalS).append(" ").append(totalW);
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
private static void solve(int x, int y){
visited[x][y] = true;
if(arr[x][y] == 'o'){
sheep += 1;
}else if(arr[x][y] == 'v'){
wolf += 1;
}
for(int i = 0; i< 4; i++){
int nextX = x + dx[i];
int nextY = y + dy[i];
if(nextX >= 0 && nextY >= 0 && nextX < r && nextY < c){
if(!visited[nextX][nextY]){
if(arr[nextX][nextY] == '.' || arr[nextX][nextY] == 'v' || arr[nextX][nextY] == 'o'){
solve(nextX, nextY);
}
}
}
}
}
}
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 10971๋ฒ : ์ธํ์ ์ํ 2 (Java) (0) | 2022.04.15 |
---|---|
๋ฐฑ์ค 2667๋ฒ : ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 4963๋ฒ : ์ฌ์ ๊ฐ์ (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 2110๋ฒ : ๊ณต์ ๊ธฐ ์ค์น (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 15686๋ฒ : ์นํจ ๋ฐฐ๋ฌ (Java) (0) | 2022.03.22 |