https://school.programmers.co.kr/learn/courses/30/lessons/154540
문제
제한사항
코드
import java.util.*;
class Solution {
public int[] solution(String[] maps) {
ArrayList<Integer> foods = new ArrayList<Integer>();
char[][] charMap = new char[maps.length][];
for (int i = 0; i < maps.length; i++) {
charMap[i] = maps[i].replaceAll("X","0").toCharArray();
}
int row = maps.length;
int col = maps[0].length();
PriorityQueue<int[]> pq = new PriorityQueue<int[]>((a,b)->a[0]-b[0]);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if(charMap[i][j]=='0') {
continue;
}
int food = 0;
pq.offer(new int[] {charMap[i][j],i,j});
charMap[i][j] = '0';
while(!pq.isEmpty()) {
int[] cur = pq.poll();
food += cur[0]-'0';
if(cur[1]-1 >= 0 && charMap[cur[1]-1][cur[2]] != '0') {//상
pq.offer(new int[] {charMap[cur[1]-1][cur[2]],cur[1]-1,cur[2]});
charMap[cur[1]-1][cur[2]] = '0';
}
if(cur[1]+1 < row && charMap[cur[1]+1][cur[2]] != '0') {//하
pq.offer(new int[] {charMap[cur[1]+1][cur[2]],cur[1]+1,cur[2]});
charMap[cur[1]+1][cur[2]] = '0';
}
if(cur[2]-1 >= 0 && charMap[cur[1]][cur[2]-1] != '0') { //좌
pq.offer(new int[] {charMap[cur[1]][cur[2]-1],cur[1],cur[2]-1});
charMap[cur[1]][cur[2]-1] = '0';
}
if(cur[2]+1 < col && charMap[cur[1]][cur[2]+1] != '0') { //우
pq.offer(new int[] {charMap[cur[1]][cur[2]+1],cur[1],cur[2]+1});
charMap[cur[1]][cur[2]+1] = '0';
}
}
foods.add(food);
}
}
Collections.sort(foods);
return foods.size() == 0 ? new int[]{-1} : foods.stream().mapToInt(i->i).toArray();
}
}
풀이