반응형
2583번 영역 구하기
문제 링크 : https://www.acmicpc.net/problem/2583
Comment
DFS공부를 시작하면서 만나게 된 문제다. 처음 떠올랐던 아이디어는 이전에 풀었던 색종이 문제처럼 먼저 구현해둔 맵 배열에 칠하고 나머지 갈라진 부분을 DFS로 채워나가자고 생각하고 접근했다.
hint
- Map을 칠하고 구분된 빈곳을 돌 때마다 count를 해주면 될듯?
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import java.io.*; import java.util.*; public class Main { static boolean map[][]; static int count = 0; static int n, m, k; static int rectangleSize = 0; static ArrayList<Integer> rectangleSizeList = new ArrayList<>(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); m = Integer.parseInt(st.nextToken()); n = Integer.parseInt(st.nextToken()); k = Integer.parseInt(st.nextToken()); map = new boolean[m][n]; for(int i = 0; i < k; i++){ st = new StringTokenizer(br.readLine()); drawRectangle(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()) ,Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken())); } for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(!map[i][j]){ count++; dfs(i, j); rectangleSizeList.add(rectangleSize); rectangleSize = 0; } } } Collections.sort(rectangleSizeList); StringBuilder sb = new StringBuilder(); sb.append(count).append("\n"); for(int i = 0; i < rectangleSizeList.size(); i++){ sb.append(rectangleSizeList.get(i) + " "); } System.out.println(sb); } static void dfs(int x, int y){ if(x >= 0 && y >= 0 && x < m && y < n) { if (!map[x][y]) { map[x][y] = true; rectangleSize++; dfs(x + 1, y); dfs(x - 1, y); dfs(x, y + 1); dfs(x, y - 1); } } } static void drawRectangle(int x1, int y1, int x2, int y2){ for(int i = y1; i < y2; i++) { Arrays.fill(map[i], x1, x2, true); } } } | cs |
Arrays.fill 메서드를 활용해보고 싶어서 사용했고, fill메서드를 안쓰고 각 좌표별로 true체크를 한 후에 칠했으면 조금 더 효율이 좋을 것 같다.
반응형
'공부 > Algorithm' 카테고리의 다른 글
백준 2644번 촌수 계산 자바(BFS,DFS)로 풀어 본 짧은 글 (0) | 2023.08.03 |
---|---|
백준 2023번 신기한 소수 자바로 풀어 본 짧은 글 (0) | 2023.07.25 |
알고리즘 근황 (0) | 2023.07.23 |
백준 11822번 Document 자바로 풀어 본 짧은 글 (0) | 2023.06.08 |
백준 21771 가희야 거기서 자는 거 아니야 자바로 풀어 본 짧은 글 (0) | 2023.05.31 |