본문 바로가기
알고리즘/알고리즘 설명

20230804 [Java] 문제풀이

by JayAlex07 2023. 8. 4.

20230804 [Java] 문제풀이

 

[프로그래머스] 무인도 여행

 

DFS만 잘 구현하면 쉽게 풀 수 있는 내용이었다

 

일단 방문처리를 하면서 섬을 탐색하면서 count에다가 maps에 있는 숫자들을 더해주면 된다

 

import java.util.*;
class Solution {

    public static int[] dr = {-1, 0, 0, 1};
    public static int[] dc = {0, -1, 1, 0};
    public static String[][] realMap;
    public static int[][] visited;
    public static int count;

    public static int dfs(int row, int column) {

        for (int i = 0; i < 4; i++) {
            int sr = dr[i] + row;
            int sc = dc[i] + column;

            if (0 <= sr && sr < realMap.length && 0 <= sc && sc < realMap[0].length) {
                if (!realMap[sr][sc].equals("X") && visited[sr][sc] == 0) {
                    visited[sr][sc] = 1;
                    count += Integer.parseInt(realMap[sr][sc]);
                    dfs(sr, sc);
                }
            }
        }

        return count;
    }

    public ArrayList<Integer> solution(String[] maps) {
        ArrayList<Integer> answer = new ArrayList<>();

        realMap = new String[maps.length][maps[0].length()];
        visited = new int[maps.length][maps[0].length()];

        boolean isIsland = false;
        for (int i = 0; i < maps.length; i++) {
            for (int j = 0; j < maps[i].length(); j++) {
                realMap[i][j] = Character.toString(maps[i].charAt(j));
                if (maps[i].charAt(j) != 'X') isIsland = true;
            }
        }

        if (!isIsland) {
            answer.add(-1);
            return answer;
        }

        for (int i = 0; i < realMap.length; i++) {
            for (int j = 0; j < realMap[i].length; j++) {
                if (!realMap[i][j].equals("X") && visited[i][j] == 0) {
                    visited[i][j] = 1;
                    count = Integer.parseInt(realMap[i][j]);
                    answer.add(dfs(i, j));
                }
            }
        }

        Collections.sort(answer);

        return answer;
    }
}

'알고리즘 > 알고리즘 설명' 카테고리의 다른 글

20230816 [Java] 문제풀이  (0) 2023.08.16
20230815 [Java] 문제풀이  (0) 2023.08.15
20230803 [Java] 문제풀이  (0) 2023.08.03
20230802 [Java] 문제풀이  (0) 2023.08.02
20230801 [Java] 문제풀이  (0) 2023.08.01