[Baekjoon] 27211_λλ νμ±
λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/27211)
< λλ νμ±>
λ¬Έμ νμ΄
λΉμ΄μλ κ³³μμ μνμ’μ°λ₯Ό νμνμ¬ λΉμ΄μλ κ³³μ μ°Ύμ μ΄λνλ€.
λ²μ λ°μΌλ‘ μ΄λν λλ μ΄μ΄μ§ κ³³μ μ μκ°νμ¬ μ΄λνλ€.
- my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _27211_ { // λλ νμ±
static int arr[][], result, n, m;
static boolean visited[][];
static int dx[]= {-1,1,0,0};
static int dy[]= {0,0,-1,1};
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(bf.readLine());
n=Integer.parseInt(st.nextToken());
m=Integer.parseInt(st.nextToken());
arr=new int[n][m];
visited=new boolean[n][m];
result=0;
for(int i=0; i<n; i++) {
st=new StringTokenizer(bf.readLine());
for(int j=0; j<m; j++) {
arr[i][j]=Integer.parseInt(st.nextToken());
if(arr[i][j]==1) visited[i][j]=true;
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(!visited[i][j]) {
visited[i][j]=true;
result+=1;
search(i,j);
}
}
}
System.out.println(result);
}
private static void search(int i, int j) {
Queue<int[]> queue=new LinkedList<>();
queue.add(new int[] {i,j});
while(!queue.isEmpty()) {
int temp[]=queue.poll();
for(int k=0; k<4; k++) {
int x=temp[0]+dx[k];
int y=temp[1]+dy[k];
if(x==-1) x= n-1;
if(y==-1) y= m-1;
if(x==n) x=0;
if(y==m) y=0;
if(x>=0 && x<n && y>=0 && y<m && !visited[x][y]) {
visited[x][y]=true;
queue.add(new int[] {x,y});
}
}
}
}
}
Main
- n, m μ λ ₯
- arr : λλ μ 보
- visited : λ°©λ¬Έ μ¬λΆ
- result: ννν μ μλ ꡬμμ κ°μ
- λλ νμ± μ 보λ₯Ό μ λ ₯λ°μ ν μ²μΌλ‘ λ§ν μλ κ³³μ΄λΌλ©΄ λ°©λ¬Έ μ¬λΆλ₯Ό trueλ‘ μ μ₯
- μ 체 λλ νμ±μ νννλ©° μμ§ λ°©λ¬Ένμ§ μμ κ³³μ΄λΌλ©΄ ννμ μμ
Search
- queueκ° λΉ λκΉμ§ λ°λ³΅νλ©΄μ κ°μ νλ λ½μ μνμ’μ° νμ
- μνμ’μ°λ₯Ό νμνλ©° λ²μ λ°μ΄λ©΄ λλ νμ±μ΄ μ΄μ΄μ Έ μμΌλ―λ‘ μ’νλ₯Ό μμ νμ¬ λ°©λ¬Έ νμ λ° queueμ μΆκ°
μκ°π€