https://school.programmers.co.kr/learn/courses/30/lessons/154540
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
어떤 독창적 풀이.. 그런 건 없습니다.
그저 DFS로 풀었습니다.
dfs 기본 코드인데 유튜브에서 설명을 참고해서 풀었습니다.
https://www.youtube.com/watch?v=yQ7o1Y7X_Rg
import java.util.*;
class Solution {
static boolean[][] visited;
int survive = 0;
static int[][] d = {{-1,0},{1,0},{0,-1},{0,1}}; // 방향
public int[] solution(String[] maps) {
List<Integer> answer = new ArrayList<>();
visited = new boolean[maps.length][maps[0].length()];
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]) {
bfs(i, j, maps);
answer.add(survive);
}
}
}
if (answer.size() == 0) return new int[] {-1};
Collections.sort(answer);
return answer.stream().mapToInt(i->i).toArray();
}
public int bfs(int startX, int startY, String[] maps) {
Queue<int[]> queue = new LinkedList<>();
survive = 0;
visited[startX][startY] = true;
queue.add(new int[]{startX, startY});
while (!queue.isEmpty()) {
int[] cur = queue.poll();
survive += Integer.parseInt(maps[cur[0]].charAt(cur[1])+"");
for (int i = 0; i < 4; i++) {
int x = cur[0] + d[i][0], y = cur[1] + d[i][1];
if (x < 0 || x > visited.length-1 || y < 0 || y > visited[0].length-1) continue;
if (visited[x][y]) continue;
if (maps[x].charAt(y) == 'X') continue;
visited[x][y] = true;
queue.add(new int[]{x,y});
}
}
return survive;
}
}
효율성은 그럭저럭입니다.
안녕히계세요뿅
'PS' 카테고리의 다른 글
[프로그래머스] 두 큐 합 같게 만들기 자바 풀이 (0) | 2023.04.21 |
---|---|
[프로그래머스] 달리기 경주 자바 풀이 (1) | 2023.04.15 |
[프로그래머스] 베스트앨범 자바 풀이 (0) | 2023.04.06 |
[프로그래머스] 방문 길이 자바 풀이 (0) | 2023.04.02 |
[프로그래머스] 오픈채팅방 자바 풀이 (0) | 2023.03.25 |