๐ ๋ฌธ์ ๋งํฌ
๐ ํ์ด ๊ณผ์
- DFS, BFS ์ ํ์ ๊ตฌํ๋ฌธ์ ์
๋๋ค. (์ ๋, DFS๋ฅผ ์ฌ๊ท๋ก ๊ตฌํํ์ต๋๋ค.)
- (0,0)์ด ์
๋ ฅ ๋ฐ์ ๋๊น์ง ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- DFS ๋ฉ์๋์์ ๊ฐ๋ก, ์ธ๋ก, ๋๊ฐ์ ๋ฐฉํฅ์ ์ฌ๋ค์ ๋ชจ๋ ํจ๊ป ํ์ํฉ๋๋ค.
- DFS ๋ฉ์๋๋ฅผ ํธ์ถํ ํ์๋ฅผ count๋ณ์์ ๋ด์์ผ ํฉ๋๋ค.
- ์ฃผ์ํ ๋ถ๋ถ์ ์ผ๋ฐ์ ์ธ x๊ฐ h์ ๋น๊ต๋ฅผ , y๋ w ๋ณ์์ ๋น๊ต๋ฅผ ํด์ผํ๋ ๊ฒ์
๋๋ค.
- ์ด์ธ์๋ ์ผ๋ฐ์ ์ธ DFS ๋ฉ์๋๋ฅผ ๊ตฌํํ์๋ฉด ํ ์ ์์ต๋๋ค.
๐ป ์ฝ๋
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int w,h,count;
static int[][] arr;
static boolean[][] visited;
static int[] dx = {-1,0,1,0,-1,-1,1,1};
static int[] dy = {0,-1,0,1,1,-1,1,-1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuffer sb = new StringBuffer();
while(true){
StringTokenizer st = new StringTokenizer(br.readLine()," ");
w = Integer.parseInt(st.nextToken());
h = Integer.parseInt(st.nextToken());
count = 0;
if(w == 0 && h == 0){
break;
}
arr = new int[h][w];
visited = new boolean[h][w];
for(int i = 0; i< h; i++){
st = new StringTokenizer(br.readLine()," ");
for(int j = 0; j< w; j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i = 0; i< h; i++){
for(int j = 0; j< w; j++){
if(arr[i][j] == 1 && !visited[i][j]){
count += 1;
dfs(i,j);
}
}
}
sb.append(count).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
private static void dfs(int x, int y){
visited[x][y] = true;
for(int i = 0; i< 8; i++){
int nextX = x + dx[i];
int nextY = y + dy[i];
if(nextX >= 0 && nextY >= 0 && nextX < h && nextY < w){
if(!visited[nextX][nextY] && arr[nextX][nextY] == 1){
dfs(nextX,nextY);
}
}
}
}
}
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2667๋ฒ : ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Java) (0) | 2022.03.22 |
---|---|
๋ฐฑ์ค 3184๋ฒ : ์ (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 2110๋ฒ : ๊ณต์ ๊ธฐ ์ค์น (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 15686๋ฒ : ์นํจ ๋ฐฐ๋ฌ (Java) (0) | 2022.03.22 |
๋ฐฑ์ค 16953๋ฒ : A -> B (Java) (0) | 2022.03.22 |