Search

무인도 여행

알고리즘
연습문제
플랫폼
프로그래머스
JCF
ArrayList
상태
해결
생성 일시
2024/02/01 06:40
최종 편집 일시
2024/02/02 10:18

문제 설명

해결과정

Solution.java

import java.util.*; class Solution { public int[] solution(String[] maps) { int[] answer = {}; // 1차원 String 배열을 2차원 char 배열로 변환 char[][] map = strArrtoCharArr(maps); boolean[][] visited = new boolean[map.length][map[0].length]; ArrayList<Integer> island = new ArrayList<>(); for(int i = 0; i < map.length; i++) { for(int j = 0; j < map[i].length; j++) { if(isNumber(map[i][j]) && visited[i][j] == false) { // 현재 섬을 방문하면 그 섬과 연결된 모든 섬을 방문하고 옴 int days = UDLR(map, visited, i, j, 0); island.add(days); } else { visited[i][j] = true; } } } if(island.size() == 0) { answer = new int [1]; answer[0] = -1; } else { Collections.sort(island); answer = island.stream().mapToInt(i -> i).toArray(); } return answer; } // 기본 함수 구조 public void function() { } // 섬 주변에 다른 섬 있는지 확인 public int UDLR (char[][] map, boolean[][] visited, int i, int j, int days) { if(0 <= i && i < map.length && 0 <= j && j < map[i].length && isNumber(map[i][j]) && visited[i][j] == false) { days += Integer.parseInt(map[i][j] + ""); visited[i][j] = true; // UP 변경된 i 인덱스가 map 내부에 있는가 그리고 자연수인가 days = UDLR(map, visited, i-1, j, days); // DOWN 변경된 i 인덱스가 map 내부에 있는가 그리고 자연수인가 days = UDLR(map, visited, i+1, j, days); // LEFT 변경된 j 인덱스가 map 내부에 있는가 그리고 자연수인가 days = UDLR(map, visited, i, j-1, days); // RIGHT 변경된 j 인덱스가 map 내부에 있는가 그리고 자연수인가 days = UDLR(map, visited, i, j+1, days); } return days; } // char가 숫자문자인지 확인 public boolean isNumber(char c) { if('0' <= c && c <= '9') { return true; } else { return false; } } // String 배열 출력 public void printString(String[] arr) { for(String str : arr) { System.out.println(str); } } // 2차원 char 배열 출력 public void printTwoDimensionsCharArr(char[][] map) { for(int i = 0; i < map.length; i++) { for(int j = 0; j < map[i].length; j++) { System.out.print(map[i][j]+" "); } System.out.println(); } } // 2차원 char 배열 출력 public void printTwoDimensionsBooleanArr(boolean[][] visited) { for(int i = 0; i < visited.length; i++) { for(int j = 0; j < visited[i].length; j++) { System.out.print(visited[i][j]+" "); } System.out.println(); } } // String 배열 maps char 배열로 변환 public char[][] strArrtoCharArr(String[] maps) { char[][] map = new char[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); } } return map; } }
Java
복사