본문 바로가기

프로그래머스

LV2 - 무인도 여행 (Java)

 


 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/154540

 

프로그래머스

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

programmers.co.kr

 

풀이

전~형적인 bfs 문제이다.

사실 크게 얘기할 거리도 없이 방문 2차원 배열을 두고 방문했는지, X가 아닌지를 검사하고 가능한 곳에서 모두 탐색하면서 방문 체크를 한다음 더해진 값을 반환해준다. 이후 정렬만 해주면 끝이난다.

 

조금 신경쓴거는 char을 어떻게 int형으로 만드나였는데, 아스키코드로 계산해서 48을 빼주면 깔끔하게 값 처리가 가능했다.

코드

import java.util.*;

class Solution {

    public int h;
    public int w;
    public List<Integer> solution(String [] maps) {
        h = maps.length;
        w = maps[0].length();
        List<Integer> result = new ArrayList<>();
        boolean visited[][] = new boolean[h][w];

        for(int i=0; i<h; i++){
            for(int j=0; j<w; j++){
                if(!visited[i][j] && maps[i].charAt(j) != 'X'){
                    result.add(bfs(i, j, maps[i].charAt(j), visited, maps));
                }
            }
        }

        Collections.sort(result);
        if(result.isEmpty()) result.add(-1);
        return result;
    }

    public int bfs(int x, int y, char value, boolean[][] visited, String[] maps){
        int dx[] = {0, -1, 1, 0};
        int dy[] = {1, 0, 0, -1};
        int sum = value - 48; // ASCII CODE
        Deque<Integer[]> deque = new ArrayDeque<>();
        deque.addLast(new Integer[]{x, y});
        visited[x][y] = true;

        while (!deque.isEmpty()) {
            Integer[] integers = deque.removeFirst();

            x = integers[0];
            y = integers[1];

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

                if(nx >= 0 && nx < h && ny >= 0 && ny < w){
                    if(maps[nx].charAt(ny) != 'X' && !visited[nx][ny]){
                        deque.addLast(new Integer[]{nx, ny});
                        visited[nx][ny] = true;
                        sum += maps[nx].charAt(ny) - 48;
                    }
                }
            }
        }
        return sum;
    }
}

 

후기

 

푸는게.. 기계적인 문제,,?

'프로그래머스' 카테고리의 다른 글

LV2 - 미로 탈출  (0) 2024.07.04
LV2 - 호텔 대실 (Java)  (0) 2024.07.03
LV2 - 전력망을 둘로 나누기 (Java)  (0) 2024.07.02
LV2 - 마법의 엘레베이터 (Java)  (0) 2024.06.29
LV2 - 소수 찾기 (Java)  (0) 2024.06.27