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분 안쪽으로 걸리게 계속 연습해야 겠다.