728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
DFS로 구하는 문제인데, 생각이 안 나서 BFS로 구현했다.
무인도별로 얼만큼의 자원이 있는지 더해준 다음 answer에 담아주면 끝.
전체코드
import java.io.*;
import java.util.*;
class Solution {
static char[][] map;
static boolean[][] visited;
static List<Integer> answer = new ArrayList<>();
static int sum = 0;
static int moveX[] = {-1, 1, 0, 0};
static int moveY[] = {0, 0, -1, 1};
static class Node{
int x;
int y;
int cnt;
Node(int x, int y, int cnt){
this.x = x;
this.y = y;
this.cnt = cnt;
}
}
public List<Integer> solution(String[] maps) {
map = new char[maps.length][maps[0].length()];
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++){
map[i][j] = maps[i].charAt(j);
}
}
for(int i=0; i<maps.length; i++){
for(int j=0; j<maps[i].length(); j++){
if(map[i][j]!='X' && !visited[i][j]){
sum = map[i][j]-48;
Island(i, j);
}else{
continue;
}
}
}
Collections.sort(answer);
if(answer.size() == 0){
answer.add(-1);
}
return answer;
}
static void Island(int x, int y){
Queue<Node> q = new LinkedList<>();
q.offer(new Node(x, y, map[x][y]));
visited[x][y] = true;
while(!q.isEmpty()){
Node n = q.poll();
for(int i=0; i<4; i++){
int newX = n.x + moveX[i];
int newY = n.y + moveY[i];
if(newX < 0 || newY < 0 || newX >= map.length || newY >= map[0].length || map[newX][newY] == 'X' || visited[newX][newY]){
continue;
}
visited[newX][newY] = true;
sum += (map[newX][newY]-48);
q.offer(new Node(newX, newY, n.cnt+map[newX][newY]-48));
}
}
answer.add(sum);
return;
}
}
728x90
'코테 > Algorithm' 카테고리의 다른 글
[Programmers] 스티커 모으기(2) (JAVA) (0) | 2024.10.18 |
---|---|
[Programmers] 불량 사용자 (JAVA) (1) | 2024.10.18 |
[Programmers] 숫자 변환하기 (JAVA) (0) | 2024.10.17 |
[Programmers][1차]캐시 (JAVA) (0) | 2024.10.16 |
[Programmers] 연속 부분 수열 합의 개수 (JAVA) (0) | 2024.09.20 |