250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 프로그래밍
- Fragment
- 프로그래머스 알고리즘
- 막내의막무가내 목표 및 회고
- 막내의 막무가내
- 막내의막무가내 코틀린
- 막내의막무가내 SQL
- 막내의막무가내 알고리즘
- 막내의막무가내 플러터
- 주엽역 생활맥주
- 프래그먼트
- 안드로이드 Sunflower 스터디
- 막내의막무가내 코볼 COBOL
- 막내의막무가내 일상
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내
- 안드로이드 sunflower
- 막내의막무가내 플러터 flutter
- 막내의 막무가내 알고리즘
- flutter network call
- 2022년 6월 일상
- 안드로이드
- 주택가 잠실새내
- 부스트코스에이스
- 막내의막무가내 코틀린 안드로이드
- 부스트코스
- 막내의막무가내 안드로이드
- 막무가내
- 막내의막무가내 rxjava
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 백준 7562 나이트의 이동, 4693 섬의개수 -dfs, bfs- 자바 본문
728x90
백준 7562 나이트의 이동을 풀어봤습니다.
방향만 잘 설정해주면됩니다.
평소 map크기를 size+2 해서 index out of error를 해결했는데 여기서는 불편해서 비교문으로 처리를 했는데 이게 더 간편한거같아서 애용하려합니다.
풀이는 다음과 같습니다.
[Java]
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
private static int size;
private static int answer = 0;
private static boolean[][] isVisited;
private static int[] dx = {-2, -1, 1, 2, 2, 1, -1, -2};
private static int[] dy = {1, 2, 2, 1, -1, -2, -2, -1};
private static int startX;
private static int startY;
private static int desX;
private static int desY;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int testCaseCnt = Integer.parseInt(sc.nextLine());
for (int i = 0; i < testCaseCnt; i++) {
size = sc.nextInt();
isVisited = new boolean[size][size];
startX = sc.nextInt();
startY = sc.nextInt();
desX = sc.nextInt();
desY = sc.nextInt();
bfs(new Point(startX, startY, 0));
System.out.println(answer);
}
}
private static void bfs(Point point) {
Queue<Point> queue = new LinkedList<>();
queue.offer(point);
isVisited[point.x][point.y] = true;
while (!queue.isEmpty()) {
Point point2 = queue.poll();
if (point2.x == desX && point2.y == desY) {
answer = point2.count;
break;
}
for (int i = 0; i < 8; i++) {
int x2 = point2.x + dx[i];
int y2 = point2.y + dy[i];
int count = point2.count + 1;
if ((x2 >= 0 && x2 < size && y2 < size && y2 >= 0) && !isVisited[x2][y2]) {
queue.offer(new Point(x2, y2, count));
isVisited[x2][y2] = true;
}
}
}
}
static class Point {
int x;
int y;
int count;
Point(int x, int y, int count) {
this.x = x;
this.y = y;
this.count = count;
}
}
}
[2020-12-26]
이와 비슷한 문제로 섬의 개수라는 문제도 있습니다.
원리는 똑같으므로 풀이만 작성해놓겠습니다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Main {
private static int[] dr = {-1, -1, -1, 0, 1, 1, 1, 0};
private static int[] dc = {-1, 0, 1, 1, 1, 0, -1, -1};
private static int w; //너비
private static int h; //높이
private static int[][] map;
private static boolean[][] isVisited;
private static int answer = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
w = sc.nextInt();
h = sc.nextInt();
while (w != 0 && h != 0) {
answer = 0;
map = new int[h][w];
isVisited = new boolean[h][w];
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
map[i][j] = sc.nextInt();
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (!isVisited[i][j] && map[i][j] == 1) {
bfs(i, j);
}
}
}
System.out.println(answer);
w = sc.nextInt();
h = sc.nextInt();
}
}
private static void bfs(int r, int c) {
Queue<Point> queue = new LinkedList<>();
queue.offer(new Point(r, c));
isVisited[r][c] = true;
while (!queue.isEmpty()) {
Point point = queue.poll();
r = point.r;
c = point.c;
for (int i = 0; i < 8; i++) {
int r2 = point.r + dr[i];
int c2 = point.c + dc[i];
if (r2 >= 0 && r2 < h && c2 >= 0 && c2 < w && !isVisited[r2][c2] && map[r2][c2] == 1) {
isVisited[r2][c2] = true;
queue.offer(new Point(r2, c2));
}
}
}
answer++;
}
static class Point {
int r;
int c;
Point(int r, int c) {
this.r = r;
this.c = c;
}
}
}
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!
728x90
'알고리즘 > DFS, BFS, 시뮬, 백트래킹' 카테고리의 다른 글
[알고리즘] 백준 15655 N과 M (6) -백트랙킹- 자바 (0) | 2020.10.30 |
---|---|
[알고리즘] 백준 15654 N과 M(5) -백트랙킹- 자바 (0) | 2020.10.28 |
[알고리즘] 백준 10026 적록색약 -dfs, bfs- 자바 (0) | 2020.10.22 |
[알고리즘] 백준 14502 연구소 -dfs, bfs- 자바 코틀린 (0) | 2020.10.22 |
[알고리즘] 프로그래머스 N으로 표현 -dfs - 자바 코틀린 (0) | 2020.10.09 |
Comments