Algorithm/Programmers

[Lv.2] 무인도 여행

시롱시롱 2023. 4. 25. 21:39
import java.util.*;

class Solution {
    public int[] solution(String[] maps) {
        int[] answer = {};
        boolean[][] visited=new boolean[maps.length][maps[0].length()];
        List<Integer> ansList=new ArrayList<>();
        //세로, 가로
        Queue<Point> queue=new LinkedList<>();
        for (int i = 0; i < maps.length; i++) {
            for (int j = 0; j < maps[i].length(); j++) {
                if(maps[i].charAt(j)!='X'&&!visited[i][j]){
                    queue.add(new Point(i,j));
                    int result=maps[i].charAt(j)-'0';
                    visited[i][j]=true;
                    while (!queue.isEmpty()){
                        Point point = queue.poll();
                        if(point.x>0&&!visited[point.x-1][point.y]&&maps[point.x-1].charAt(point.y)!='X'){
                            result+=maps[point.x-1].charAt(point.y)-'0';
                            visited[point.x-1][point.y]=true;
                            queue.add(new Point(point.x-1, point.y));
                        }
                        if(point.x< maps.length-1&&!visited[point.x+1][point.y]&&maps[point.x+1].charAt(point.y)!='X'){
                            result+=maps[point.x+1].charAt(point.y)-'0';
                            visited[point.x+1][point.y]=true;
                            queue.add(new Point(point.x+1, point.y));
                        }
                        if(point.y> 0&&!visited[point.x][point.y-1]&&maps[point.x].charAt(point.y-1)!='X'){
                            result+=maps[point.x].charAt(point.y-1)-'0';
                            visited[point.x][point.y-1]=true;
                            queue.add(new Point(point.x, point.y-1));
                        }
                        if(point.y< maps[point.x].length()-1&&!visited[point.x][point.y+1]&&maps[point.x].charAt(point.y+1)!='X'){
                            result+=maps[point.x].charAt(point.y+1)-'0';
                            visited[point.x][point.y+1]=true;
                            queue.add(new Point(point.x, point.y+1));
                        }
                    }
                    ansList.add(result);
                }
            }
        }
        if(ansList.isEmpty())
            return new int[]{-1};
        Collections.sort(ansList);
        return ansList.stream().mapToInt(i->i).toArray();
    }
    class Point{
        int x,y;

        public Point(int x, int y) {

            this.x = x;
            this.y = y;
        }
    }
}

내일 시험이 있어 빨리 한 문제 풀고 공부하러 가려고 푼 문제였다.

전형적인 bfs문제였고 무난하게 통과했다.

Lv2 정도 문제를 푸는데 10분 안쪽으로 걸리게 계속 연습해야 겠다.