본문 바로가기

ALGORITHM

백준 1926 그림 (Java)

1. 문제 링크

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

처음에는 우, 하만 확인하면 될거라고 생각했는데

역시 아니었고….

아래의 반례에서 틀렸다. (dfs로 돌아가니까 사방으로 탐색하는게 맞지..)

4 5

1 1 1 0 1

1 0 1 0 1

1 0 1 0 1

1 0 1 1 1

 

dfs탐색을 사방으로 하면서 각 그림의 크기를 list에 추가했다.

전체를 돌고 나서는 list를 정렬하여 그림의 개수와 그림의 최대 크기를 출력했다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Queue;
import java.io.IOException;

public class Main {
	static int N, M, cnt, max;
	static boolean[][] map, visit;
	static int[] dx = {0,0,-1,1}, dy = {-1,1,0,0};
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] split = br.readLine().split(" ");
		N = Integer.parseInt(split[0]);
		M = Integer.parseInt(split[1]);
		map = new boolean[N][M];
		visit = new boolean[N][M];
		for(int i=0;i<N;i++) {
			split = br.readLine().split(" ");
			for(int j=0;j<M;j++) {
				if(split[j].equals("0")) {
					map[i][j] = false;
				}
				else {
					map[i][j] = true;
				}
			}
		} //입력 끝
		
		ArrayList<Integer> list = new ArrayList<>();
		for(int i=0;i<N;i++) {
			for(int j=0;j<M;j++) {
				if(map[i][j] && !visit[i][j]) {
					cnt = 0;
					dfs(i, j);
					list.add(cnt);
				}
			}
		}		
		Collections.sort(list);
		int size = list.size();
		if(size==0) {
			System.out.println(0+"\n"+0);
		}
		else {
			System.out.println(size+"\n"+list.get(size-1));
		}
	}
	private static void dfs(int x, int y) {
		visit[x][y] = true;
		cnt++; 
		for(int d=0;d<4;d++) {
			int X = x+dx[d];
			int Y = y+dy[d];
			if(X>=0 && X<N && Y>=0 && Y<M && !visit[X][Y] && map[X][Y]) {
				dfs(X, Y);
			}
		}
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 9935 문자열 폭발 (Java)  (0) 2023.05.31
백준 16463 13일의 금요일 (Java)  (0) 2023.05.30
백준 13164 행복 유치원 (Java)  (0) 2023.05.28
백준1245 농장 관리 (Java)  (0) 2023.05.27
백준 1796 신기한 키보드 (Java)  (0) 2023.05.26