프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

문제풀이
1. 숫자가 포함된 지도를 그린뒤 ( 2차원 배열 생성 ) , 상하좌우를 탐색하여 섬인지 아닌지 ( DFS ) 판단하여 섬이면 카운팅하는 방식
2. 자바의 PriorityQueue 를 활용해 ( 기본 설정이 오름차순 ) pq에 방문섬의 음식량을 담아 차후에 pq를 answer[ ] 배열에 담으면 끝
나의풀이 ( 코드 )
import java.util.PriorityQueue;
class Solution {
static boolean[][] visited;
static int cnt = 0;
static int[][] numMaps;
static PriorityQueue<Integer> pq;
public int[] solution(String[] maps) {
int[] answer = {};
visited = new boolean[maps.length][maps[0].length()];
numMaps = new int[maps.length][maps[0].length()];
pq = new PriorityQueue<>();
for (int i = 0; i < maps.length; i++) { // 지도 만들기
for (int j = 0; j < maps[0].length(); j++) {
if (maps[i].charAt(j) != 'X') {
numMaps[i][j] = maps[i].charAt(j) - 48;
}
}
}
for (int i = 0; i < maps.length; i++) {
for (int j = 0; j < maps[0].length(); j++) {
if (numMaps[i][j] != 0 && !visited[i][j]) {
find(i, j);
pq.add(cnt);
cnt = 0;
}
}
}
if (pq.isEmpty()) {
answer = new int[1];
answer[0] = -1;
} else {
answer = new int[pq.size()];
while (!pq.isEmpty()) {
answer[cnt] = pq.poll();
cnt++;
}
}
return answer;
}
static void find(int x, int y) {
if (x < 0 || x == numMaps.length || y < 0 || y == numMaps[0].length || numMaps[x][y] == 0 || visited[x][y]) {
return;
}
visited[x][y] = true;
cnt += numMaps[x][y];
find(x - 1, y);
find(x + 1, y);
find(x, y - 1);
find(x, y + 1);
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/JAVA 자바] 괄호 변환 (0) | 2024.05.13 |
|---|---|
| [프로그래머스/JAVA 자바] 줄 서는 방법 (0) | 2024.05.10 |
| [프로그래머스/JAVA 자바] 숫자 카드 나누기 (0) | 2024.05.10 |
| [프로그래머스/JAVA 자바] [3차] 방금그곡 (0) | 2024.05.09 |
| [프로그래머스/JAVA 자바] 배달 (2) | 2024.05.07 |