View

λ°˜μ‘ν˜•

πŸ’‘ 문제

λ©”λ¦¬λŠ” 여름을 λ§žμ•„ λ¬΄μΈλ„λ‘œ 여행을 κ°€κΈ° μœ„ν•΄ 지도λ₯Ό 보고 μžˆμŠ΅λ‹ˆλ‹€. μ§€λ„μ—λŠ” 바닀와 무인도듀에 λŒ€ν•œ 정보가 ν‘œμ‹œλΌ μžˆμŠ΅λ‹ˆλ‹€. μ§€λ„λŠ” 1 x 1크기의 μ‚¬κ°ν˜•λ“€λ‘œ 이루어진 μ§μ‚¬κ°ν˜• 격자 ν˜•νƒœμ΄λ©°, 격자의 각 μΉΈμ—λŠ” 'X' λ˜λŠ” 1μ—μ„œ 9 μ‚¬μ΄μ˜ μžμ—°μˆ˜κ°€ μ ν˜€μžˆμŠ΅λ‹ˆλ‹€. μ§€λ„μ˜ 'X'λŠ” λ°”λ‹€λ₯Ό λ‚˜νƒ€λ‚΄λ©°, μˆ«μžλŠ” 무인도λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λ•Œ, 상, ν•˜, 쒌, 우둜 μ—°κ²°λ˜λŠ” 땅듀은 ν•˜λ‚˜μ˜ 무인도λ₯Ό μ΄λ£Ήλ‹ˆλ‹€. μ§€λ„μ˜ 각 칸에 적힌 μˆ«μžλŠ” μ‹λŸ‰μ„ λ‚˜νƒ€λ‚΄λŠ”λ°, 상, ν•˜, 쒌, 우둜 μ—°κ²°λ˜λŠ” 칸에 적힌 숫자λ₯Ό λͺ¨λ‘ ν•©ν•œ 값은 ν•΄λ‹Ή λ¬΄μΈλ„μ—μ„œ μ΅œλŒ€ λ©°μΉ λ™μ•ˆ λ¨Έλ¬Ό 수 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ–΄λ–€ μ„¬μœΌλ‘œ λ†€λŸ¬ κ°ˆμ§€ λͺ» μ •ν•œ λ©”λ¦¬λŠ” μš°μ„  각 μ„¬μ—μ„œ μ΅œλŒ€ λ©°μΉ μ”© λ¨Έλ¬Ό 수 μžˆλŠ”μ§€ μ•Œμ•„λ³Έ ν›„ λ†€λŸ¬κ°ˆ 섬을 κ²°μ •ν•˜λ € ν•©λ‹ˆλ‹€.

지도λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ λ°°μ—΄ mapsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 각 μ„¬μ—μ„œ μ΅œλŒ€ λ©°μΉ μ”© 머무λ₯Ό 수 μžˆλŠ”μ§€ 배열에 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ‹΄μ•„ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”. λ§Œμ•½ 지낼 수 μžˆλŠ” 무인도가 μ—†λ‹€λ©΄ -1을 배열에 λ‹΄μ•„ return ν•΄μ£Όμ„Έμš”.


μ œν•œμ‚¬ν•­

  • 3 ≀ maps의 길이 ≀ 100
    • 3 ≀ maps[i]의 길이 ≀ 100
    • maps[i]λŠ” 'X' λ˜λŠ” 1 κ³Ό 9 μ‚¬μ΄μ˜ μžμ—°μˆ˜λ‘œ 이루어진 λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
    • μ§€λ„λŠ” μ§μ‚¬κ°ν˜• ν˜•νƒœμž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

maps result
["X591X","X1X5X","X231X", "1XXX1"] [1, 1, 27]
["XXX","XXX","XXX"] [-1]

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1

μœ„ λ¬Έμžμ—΄μ€ λ‹€μŒκ³Ό 같은 지도λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

https://user-images.githubusercontent.com/62426665/206862823-4633fbf1-c075-4d35-b577-26f504dcd332.png

μ—°κ²°λœ λ•…λ“€μ˜ 값을 ν•©μΉ˜λ©΄ λ‹€μŒκ³Ό κ°™μœΌλ©°

https://user-images.githubusercontent.com/62426665/209070615-ae568f20-cf06-4f88-8d4f-8e9861af2d36.png

이λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λ©΄ [1, 1, 27]이 λ©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2

μœ„ λ¬Έμžμ—΄μ€ λ‹€μŒκ³Ό 같은 지도λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

https://user-images.githubusercontent.com/62426665/206863265-0a371c69-d4b5-411a-972f-bdc36b90c917.png

섬이 μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— -1을 배열에 λ‹΄μ•„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

πŸ’‘ μ½”λ“œ

import java.util.*;
class Solution {

    static int dy[] ={0,1,-1,0};
    static int dx[]={1,0,0,-1};

    static class Node{
        int y;
        int x;
        public Node(int y, int x){
            this.y=y;
            this.x=x;
        }
    }

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

        // 각 λ¬Έμžμ—΄μ„ parsing ν•΄μ„œ 이차원 λ°°μ—΄λ‘œ λ§Œλ“¦ (char arr)
        int mapsLength = maps[0].length();
        char arr[][]= new char [maps.length][mapsLength];

        //////// char둜 λ°”κΏ”μ„œ 이λ₯Ό 이차원 λ°°μ—΄λ‘œ λ§Œλ“œλŠ” 것을 잘 λͺ»ν•˜λŠ”즁!
        for (int i=0; i<maps.length; i++){
           for (int j=0; j<mapsLength; j++){
              arr[i][j]= maps[i].charAt(j);
           }
        }

        // λ°©λ¬Έν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•œ λ°°μ—΄(boolean isVisited)
        boolean isVisited[][] = new boolean [maps.length][mapsLength];

        // BFS 탐색 -> arr 배열을 λŒλ©΄μ„œ 숫자λ₯Ό λ°œκ²¬ν•˜λ©΄ que에 addμ‹œμΌœμ€Œ 
        //BFS탐색을 μœ„ν•œ QUEμ„ μ–Έ
        Queue<Node> que = new LinkedList<Node>(); 

        int sum=0;
       for (int y=0; y<maps.length; y++){
           for (int x=0; x<mapsLength; x++){
            if (arr[y][x] != 'X' && isVisited[y][x]!=true){
                sum+=arr[y][x]-'0';
                que.add (new Node(y,x));
                isVisited[y][x]=true;

                while (!que.isEmpty()){
                    Node poll = que.poll();

                    for (int i=0; i<4; i++){
                        int ny= dy[i]+poll.y;
                        int nx= dx[i]+poll.x;

                        if ( ny >=0 && nx >=0 && ny <maps.length && nx <mapsLength && arr[ny][nx]!='X' && isVisited[ny][nx]!=true ){
                            //poll을 ν•œ λ’€ 값이 μœ νš¨ν•˜λ‹€λ©΄ addν•΄μ€Œ +=sum
                            sum+=arr[ny][nx] -'0';
                            que.add(new Node(ny, nx));
                            isVisited[ny][nx]=true;
                        }
                    }
                }
                // queκ°€ λΉ„κ²Œ 되면 μ§€κΈˆκΉŒμ§€μ˜ 합을 answer에 λ„£μ–΄μ€Œ
                 tmp.add(sum);
                 System.out.println(tmp.get(0));
                sum=0;

            }
           }
       }
         int answer[];
        // for 문을 ν†΅ν•΄μ„œ λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…ΈνŠΈλ₯Ό 탐색 
        if (tmp.size()!=0){
    answer = new int [tmp.size()];
         Collections.sort(tmp);

        for (int i=0; i<tmp.size(); i++){
            answer[i]=tmp.get(i);
        }
    }
    else { 
        answer= new int[1];
        answer[0]=-1;
         }
    return answer;
    }
}
λ°˜μ‘ν˜•
Share Link
reply
λ°˜μ‘ν˜•
Β«   2025/01   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31