ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1926 그림 #JAVA
    Algorithm Solving/BAEKJOON 2020. 12. 3. 23:12

     

    BAEKJOON [1926] 그림


    코드


     

    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 Main {
    	public static void main(String args[]) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		String nm = br.readLine();
    		int inputN = Integer.parseInt(nm.split(" ")[0]);
    		int inputM = Integer.parseInt(nm.split(" ")[1]);
    		
    		boolean vis[][] = new boolean[inputN][inputM];
    		int picture[][] = new int[inputN][inputM];
    		
    		int dx[] = {0,1,0,-1};
    		int dy[] = {1,0,-1,0};
    		
    		int pictureMax = 0;
    		int pictureCnt = 0;
    		
    		Queue<Pair> queue = new LinkedList<Pair>();
    		
    		for (int i = 0; i < inputN; i++) {
    			String input = br.readLine();
    			StringTokenizer st = new StringTokenizer(input," ");
    			
    			for (int j = 0; j < inputM; j++) {
    				
    				picture[i][j] = Integer.parseInt(st.nextToken());
    			}
    		}
    		
    		//bfs
    		for (int i = 0; i < inputN; i++) {
    			for (int j = 0; j < inputM; j++) {
    				if(picture[i][j] == 1 && !vis[i][j]) {
    					
    					vis[i][j] = true;
    					queue.add(new Pair(i,j));
    					
    					pictureCnt++;
    					int pictureSize=1;
    					
    					while (!queue.isEmpty()) {
    						Pair pair = queue.poll();
    						
    						for(int dir=0; dir<4 ;dir++) {
    							int nx = pair.x + dx[dir];
    							int ny = pair.y + dy[dir];
    							
    							if(nx<0 || ny<0 || nx >= inputN || ny >= inputM) continue;
    							if(vis[nx][ny] || picture[nx][ny] == 0) continue;
    							
    							vis[nx][ny] = true;
    							queue.add(new Pair(nx, ny));
    							pictureSize++;
    						}
    					}
    					
    					if(pictureMax < pictureSize) pictureMax = pictureSize;
    				}
    			}
    		}
    		
    		System.out.println(pictureCnt);
    		System.out.println(pictureMax);
    		
    	}
    }
    
    class Pair{
    	int x;
    	int y;
    	
    	public Pair(int x, int y) {
    		this.x = x;
    		this.y = y;
    	}
    }
    

     

     

     

    풀이


    • BFS
    • 방문 여부를 확인하는 vis 배열을 사용함

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    'Algorithm Solving > BAEKJOON' 카테고리의 다른 글

    [백준] 7569 토마토#JAVA  (0) 2020.12.06
    [백준] 7576 토마토 #JAVA  (0) 2020.12.05
    [백준] 2178 미로탐색 #JAVA  (0) 2020.12.03
    [백준] 1074 Z #JAVA  (0) 2020.11.01
    [백준] 1475 방 번호  (0) 2020.09.27

    댓글