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 |
Tags
- javascript 자동완성
- 재귀함수 예제
- git 연동
- katalon
- 피보나치 예제
- oracle group by
- katalon 비교
- 피보나치함수 예제
- 주식 양도세 신고방법
- 재귀 예제
- katalon 사용법
- 한국투자증권 해외주식 양도세
- katalon 자동화
- 피보나치함수
- 톰캣 실시간 로그
- 최대공약수 예제
- js 자동완성
- 홈택스 해외주식 양도세
- katalon xpath
- 국세청 해외주식 양도세 신고방식
- bfs 미로탐색 java
- 한국투자증권 양도세 신고
- recursion example
- tomcat log
- 해외증권 양도세 한국투자증권
- CSTS 폭포수 모델
- 해외주식 양도세 신고
- java.sql.SQLSyntaxErrorException
- 테스트 자동화
- Katalon Recorder 사용법
Archives
- Today
- Total
엄지월드
[백준] 2178 미로 탐색 (BFS) 본문
설명
N x M 배열이 있을 때에 1이 이동 가능한 위치이고, 0이 이동 불가한 위치이다.
N,M 위치까지 가는 방법에 대해서 최소한의 경우를 출력해준다.
소스 해석
- map에다가 문제에서 주어진 값 0, 1을 저장
- 특정 부분을 방문했는지 체크하기 위해 visited 배열 운영
- queue를 활용해서 시작 위치를 넣어주면서 BFS 시작
- for문을 활용해서 이동가능한 상화좌우를 탐색하고,
이동 가능한 부분이 있으면 새로운 queue를 생성해서 계속해서 탐색할 수 있도록 함. - 이동이 불가하면 queue에 값을 넣지 않음
- 모든 queue에 있는 값이 이동이 불가하면 queue에 추가적으로 값을 넣지 않기 때문에 queue가 비어져서 while(탐색)이 종료됨.
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOK_2178 {
static int[][] map;
static int N;
static int M;
static boolean[][] visited;
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N][M];
for(int i=0; i<N; i++){
String s = br.readLine();
for(int j=0; j<M; j++){
map[i][j] = s.charAt(j) - '0';
}
}
visited = new boolean[N][M];
visited[0][0] = true;
bfs(0, 0);
System.out.println(map[N-1][M-1]);
}
public static void bfs(int x, int y){
Queue<int[]> q = new LinkedList<>();
q.add(new int[] {x,y});
while(!q.isEmpty()){
int now[] = q.poll();
int nowX = now[0];
int nowY = now[1];
for(int i=0; i<4; i++){
int nextX = nowX + dx[i];
int nextY = nowY + dy[i];
if(nextX < 0 || nextY < 0 || nextX >= N || nextY >= M) // 범위 벗어나면
continue;
if(visited[nextX][nextY] || map[nextX][nextY] == 0) // 이미 방문했거나 막혀있으면
continue;
q.add(new int[] {nextX, nextY});
map[nextX][nextY] = map[nowX][nowY] + 1;
visited[nextX][nextY] = true;
}
}
}
}
'알고리즘' 카테고리의 다른 글
[백준] 7576 토마토(BFS) (0) | 2022.07.29 |
---|---|
[백준] 2606 바이러스(BFS) (0) | 2022.07.27 |
기술면접 준비 (0) | 2022.07.08 |
그리디 알고리즘 (0) | 2022.06.28 |
팰린드롬 (0) | 2022.06.17 |
Comments