154540. 무인도 여행

2025. 3. 13. 20:55·Algorithm/Programmers

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

제한사항

풀이

import java.util.*;

class Solution {
    public int[] solution(String[] maps) {
        int[] answer = {};
        List<Integer> result = new ArrayList<>();
        int n = maps.length;
        int m = maps[0].length();
        
        int[][] mapArr =new int [n][m];
        boolean[][] visited = new boolean[n][m];
        
        for(int i = 0 ; i< n;i++) 
            for(int j = 0 ; j<m ; j++) {
                if(maps[i].charAt(j) != 'X') {
                    mapArr[i][j] = maps[i].charAt(j) - '0';
                } else {
                    mapArr[i][j] = 0;
                }
                // System.out.println(mapArr[i][j]);
            }
        
        for(int i = 0 ; i< n;i++) 
            for(int j = 0 ; j<m ; j++) {
                if(visited[i][j] || mapArr[i][j] == 0) continue;
                
                int days = bfs(i, j, visited, mapArr);
                result.add(days);
                // String arr[] = arrList.toArray(new String[arrListSize]);
            }
        if(result.isEmpty()) return new int[]{-1};
        answer = result.stream().mapToInt(i->i).toArray();
        Arrays.sort(answer);
        return answer; 
        
    }
    
    int bfs(int r, int c, boolean[][] visited, int[][] mapArr) {
        
        Queue<int[]> q = new LinkedList<>();
        int n = mapArr.length;
        int m = mapArr[0].length;
        
        int[][] dir = {{-1,0}, {1, 0}, {0, -1}, {0, 1}};
        int days = mapArr[r][c];
        q.offer(new int[]{r, c});
        visited[r][c] = true;
        
        while(!q.isEmpty()) {
            int[] cur = q.poll();
            
            for(int i = 0 ; i < 4 ; i++) {
                int nr = cur[0] + dir[i][0];
                int nc = cur[1] + dir[i][1];
                
                if(nr>=0 && nr < n && nc>=0 && nc<m && !visited[nr][nc] && mapArr[nr][nc]!=0) {
                    q.offer(new int[]{nr, nc});
                    visited[nr][nc] = true;
                    // System.out.println("mapArr[nr][nc]: " + mapArr[nr][nc]);            
                    days+= mapArr[nr][nc];
                }
            }
        }
        // System.out.println("days: " + days);
        return days;
    }
}

회고

섬을 찾고 섬에 머물 수 있는 기한을 찾는 문제였다. 기한은 섬을 구성하는 좌표의 값을 합한 값이다. BFS를 이용해 섬을 탐색하는 작업을 하였다. 비교적 쉬운 문제였지만, 각 좌표의 방문 또는 '섬'을 확인할 때, 섬일 경우 첫 방문 좌표를 방문 체크하지 않아서 살짝 헤맸다.

'Algorithm > Programmers' 카테고리의 다른 글

17686. 파일명 정렬  (0) 2025.03.25
155651. 호텔 대실  (0) 2025.03.24
159993. 미로탈출  (0) 2025.03.11
340211. 충돌위험 찾기  (0) 2025.03.01
169199. 리코챗 로봇  (0) 2025.02.27
'Algorithm/Programmers' 카테고리의 다른 글
  • 17686. 파일명 정렬
  • 155651. 호텔 대실
  • 159993. 미로탈출
  • 340211. 충돌위험 찾기
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Generic
    rotting oranges
    socar
    Reorder List
    Oauth2
    lower bounded wildcards
    runner 기법
    fcfs
    algorithm
    Process
    제네릭
    BFS
    Climbing Stairs
    LinkedList
    디자인 패턴
    @JsonProperty
    준영속 엔티티
    wildcards
    @JsonNaming
    트랜잭션
    Thread
    AuthenticationSuccessHandler
    JSCode
    추상화 클래스
    RR
    운영체제
    minimum number of arrows to burst balloons
    OS
    pacific atlantic water flow
    clone graph
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
154540. 무인도 여행
상단으로

티스토리툴바