본문 바로가기
Algorithm/소프티어

[Softeer] 장애물 인식 프로그램 - JAVA

by LeeGangEun 2023. 8. 2.


장애물 인식 프로그램 문제 바로가기

풀이 

전형적인 탐색문제이다.
DFS, BFS 원하는 방식으로 풀면 될 것 같다.
전체를 한번씩 순회하해야 되니까 중복 방문 방지를 위한 방문체크(visited) 가 필요하고,
순회할때마다 카운팅을 해서 마지막에 오름차순 후 출력해주면 된다.

import java.util.*;
import java.io.*;
import java.util.stream.IntStream;


public class Main {

    private static int N;
    private static int[][] arr;
    private static boolean[][] visited;
    private static List<Integer> hurdleAreaCountList = new ArrayList<>();
    private static int areaCount;

    private static final int[] moveX = {-1, 1, 0, 0};
    private static final int[] moveY = {0, 0, -1, 1};

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        arr = new int[N][N];
        visited = new boolean[N][N];

        for (int i = 0; i < N; i++) {
            char[] ch = br.readLine().toCharArray();
            for (int j = 0; j < N ; j++) {
                if (ch[j] == '0') continue;
                arr[i][j] = 1;
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if(visited[i][j] || arr[i][j] == 0) continue;
                areaCount = 1;
                dfs(i, j);
                hurdleAreaCountList.add(areaCount);
            }
        }
        Collections.sort(hurdleAreaCountList);

        System.out.println(hurdleAreaCountList.size());
        hurdleAreaCountList.forEach(System.out::println);
    }

    private static void dfs(int x, int y) {
        visited[x][y] = true;


        for (int i = 0; i < 4; i++) {
            int mx = x + moveX[i];
            int my = y + moveY[i];
            if(mx < 0 || my < 0 || mx >= N || my >= N || arr[mx][my] == 0 || visited[mx][my]) continue;
            areaCount++;
            dfs(mx, my);
        }

    }


}

 

'Algorithm > 소프티어' 카테고리의 다른 글

[Softeer] 회의실 예약 - JAVA  (0) 2023.08.03
[Softeer] 비밀 메뉴 - JAVA  (0) 2023.08.03
[Softeer] 지도 자동 구축 - JAVA  (0) 2023.08.03
[Softeer] 8단 변속기 - JAVA  (0) 2023.08.02
[Softeer] 금고털이 - JAVA  (0) 2023.08.02