BOJ 2583번 영역 구하기 문제 자바(java) 풀이
문제정리
- MxN 크기의 모눈종이가 주어진다.
- 모눈 종이 위에 K개의 직사각형을 그린다.
- k개의 직사각형의 내부를 제외한 나머지 부분이 몇 개의 분리된 영역으로 나누어진다.
- 몇개의 영역으로 분리되는지, 각 영역의 넓이는 어떤지 구하여라
문제풀이
- 분리된 영역과 넓이를 구하는 것이므로 모든 좌표에서 bfs 탐색을 하면 됩니다.
이 문제는 영역을 구분짓는 문제인 보물섬, 치즈, 빙산과 유사합니다.
- 문제에서 주어지는 직사각형의 좌표들과 배열의 인덱스가 다르기 때문에 주어진 x,y좌표를 반대로 바꿔줍니다. ( 바꾸면 답이 잘 나오는지 직접 그려보느라 시간 좀더 걸림 )
- 직사각형이 있는 곳은 map에 1로 표시합니다.
- 그리고 유효한 인덱스이며 map에 1로 표시되어있지 않은곳만 방문하며 영역의 넓이를 구합니다.
- Collections.sort를 이용하여 오름차순 정렬합니다.
- 영역의 개수는 bfs 함수를 부른 횟수로 계산할 수 있습니다.
dfs나 bfs 상관 없이 통과할 수 있습니다.
BOJ 2583번 영역 구하기 자바 코드