Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- reshape
- 머신러닝(딥러닝)
- CNN
- 데이터베이서
- 판다스
- 생활코딩 머신러닝야학
- JavaScript
- 파이썬
- 야학
- 데이터베이스 개론
- 연산자
- Python
- 딥러닝
- 생활코딩
- Database
- 카카오클라우드스쿨2기
- 머신러닝
- 개발자
- pandas
- 이것이 자바다
- Java
- 머신러닝야학
- LeNet
- tensorflow
- 데이터베이스
- 생활코딩 데이터베이스
- flatten
- MySQL
Archives
- Today
- Total
IT's 우
[java, BFS] 프로그래머스 - 무인도 여행 본문
728x90
📖 풀이한 문제
https://school.programmers.co.kr/learn/courses/30/lessons/154540
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 문제에서 사용된 알고리즘
- DFS
📜 코드
import java.util.*;
class Solution {
static boolean [][] visited;
static char [][] map;
static int w, h;
public int[] solution(String[] maps) {
int[] answer = {-1};
h = maps.length;
w = maps[0].length();
// 무인도 방문 체크하기 위하여
visited = new boolean[h][w];
// 정답 넣기
ArrayList<Integer> list = new ArrayList<>();
// maps를 char 이차원 배열로 바꾸기
map = new char[h][w];
for (int i = 0; i < h; i++) {
map[i] = maps[i].toCharArray();
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] != 'X' && !visited[i][j]) {
list.add(findMax(i, j));
}
}
}
int size = list.size();
if (list.get(0) != -1) {
Collections.sort(list);
answer = new int[size];
for (int i = 0; i < size; i++) {
answer[i] = list.get(i);
}
}
System.out.println(list);
return answer;
}
public int findMax(int x, int y) {
int max = (map[x][y] - '0');
// 상하좌우
int [] dx = {-1, 1, 0, 0};
int [] dy = {0, 0, -1, 1};
Queue<int[]> que = new LinkedList<>();
que.add(new int[]{x, y});
visited[x][y] = true;
while(!que.isEmpty()) {
int[] now = que.poll();
for (int i = 0; i < 4; i++) {
int nx = now[0] + dx[i];
int ny = now[1] + dy[i];
if (nx >=0 && ny >= 0 && nx < h && ny < w && map[nx][ny] != 'X' && !visited[nx][ny]) {
visited[nx][ny] = true;
que.add(new int[]{nx, ny});
max += (map[nx][ny] - '0');
}
}
}
return max;
}
}
📜 코드 설명
- String [] maps → char [][] map의 형태로 바꿔줌
- map을 돌며 X가 아니고 방문을 하지 않았을 때 무인도이므로 findMax 메서드를 사용하여 무인도의 최대 살 수 있는 날짜를 찾아준다. 그 값을 리스트에 넣어줬다.
- findMax는 DFS를 사용하여 구해주었다.
- Queue를 사용하여 현재 큐에서 꺼낸 값의 상하좌우를 확인하여 배열 안에 있고 X가 아니고 방문을 하지 않았더라면
- 다음 이동한 값의 인덱스를 방문확인해 준다
- 큐에 다음 이동할 값의 인덱스를 넣어준다.
- max(최대 살 수 있는 날짜)에 값을 더해준다.
- answer의 초기값으로 {-1}으로 설정해 준다. → 무인도가 없을 때를 위하여
- list의 값이 있더라면 리스트를 오름차순 정렬해 주고 anwer에 값을 넣어주었다.
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[java, BFS(깊이우선탐색)]프로그래머스 - 리코쳇 로봇 (1) | 2023.06.01 |
---|---|
[java, DFS] 프로그래머스 - 광물 캐기 (0) | 2023.05.24 |
[java] 프로그래머스 - 과제 진행하기 (0) | 2023.05.17 |
[java]프로그래머스 - 연속된 부분 수열의 합 (0) | 2023.05.15 |
[java] 프로그래머스 - 단어 변환 (1) | 2023.05.14 |