| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- C
- 우선순위큐
- dfs
- 통신 인터페이스
- BFS
- level3
- 2018 KAKAO BLIND RECRUITMENT
- 컴퓨터비전
- 코틀린
- 컴퓨터 비전
- 다이나믹프로그래밍
- 누적합
- dp
- kotlin
- 백준
- JavaScript
- 자바
- Stack
- level2
- 임베디드
- 이분탐색
- 구현
- c++
- 프로그래머스
- 다이나믹 프로그래밍
- lv2
- 그리디
- 동적계획법
- cpp
- java
Archives
- Today
- Total
코드를 느껴바라
Lv.2 무인도 여행 [JAVA] 본문
성공 여부(걸린 시간): 성공 (15분)
아이디어
간단한 BFS문제이다.
전체적인 순서는 각 칸을 순회하며 각 칸에서 BFS를 돎(방문처리를 할 배열은 전역 배열 하나로 충분)
BFS를 돌다가 더이상 이동할 수 없거나 해당 섬을 전부 탐색하였다면(주변에 숫자로된 땅이 더 없다는 뜻)
BFS가 끝나고 해당 섬을 순회하며 얻은 수의 합을 우선순위큐에 넣는다.
이제 이걸 map의 크기만큼 전부 반복
그리고 결과는 마지막에 우선순위큐가 비어있으면 배열에 -1 하나 넣어서 return
아니라면 배열에 담아서 return
풀이코드
import java.util.*;
class Solution {
static PriorityQueue<Integer> pq;
static boolean [][] visited;
static String[] map;
static int N, M;
public int[] solution(String[] maps) {
map = maps;
pq = new PriorityQueue<>();
N = maps.length;
M = maps[0].length();
visited = new boolean[N][M];
for(int i = 0; i<N; i++){
for(int j = 0; j<M; j++){
if(!visited[i][j]&&map[i].charAt(j)!='X'){
BFS(i, j);
}
}
}
if(pq.isEmpty()){
return new int [] {-1};
}
int[] answer = new int[pq.size()];
for(int i=0; i<answer.length; i++){
answer[i] = pq.poll();
}
return answer;
}
static int [] dx = {1, 0, -1, 0};
static int [] dy = {0, 1, 0, -1};
static void BFS(int i, int j){
ArrayDeque<int[]> q = new ArrayDeque<>();
q.add(new int []{i, j});
visited[i][j] = true;
int sum = 0;
while(!q.isEmpty()){
int [] cur = q.poll();
int x = cur[0];
int y = cur[1];
sum+=map[x].charAt(y)-'0';
for(int dir=0; dir<4; dir++){
int mx = x+dx[dir];
int my = y+dy[dir];
if(canGo(mx, my)&&!visited[mx][my]&&map[mx].charAt(my)!='X'){
q.add(new int [] {mx, my});
visited[mx][my]= true;
}
}
}
pq.add(sum);
}
static boolean canGo(int x, int y){
return x>=0&&y>=0&&x<N&&y<M;
}
}
/*
전체적인 순서
각 칸을 순회하며 각 칸에서 BFS를 돎
BFS를 돌다가 더이상 이동할 수 없거나 해당 섬을 전부 탐색하였다면
우선순위큐에 넣고 그걸 전부 반복
그냥 마지막에 우선순위큐가 비어있으면 -1 출력 아니라면 배열에 담아서 return
*/반응형
'PS > 프로그래머스(Programmers)' 카테고리의 다른 글
| Lv.2 귤 고르기 [JAVA] (4) | 2025.07.26 |
|---|---|
| Lv.2 뒤에 있는 큰 수 찾기 [JAVA] (2) | 2025.07.20 |
| Lv.2 [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (0) | 2025.05.13 |
| Lv.3 등굣길 [JAVA] (0) | 2025.05.11 |
| Lv.3 섬 연결하기 [JAVA] (0) | 2025.05.11 |
