일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩공부
- java
- BFS
- 시간 복잡도
- 백준
- 무료코딩강의
- ★
- 자바의정석연습문제
- 무료개발강의
- 개발공부
- 빅오 표기법
- 알고리즘
- 자바개념
- 백준단계별로풀어보기
- ☆
- 자바의정석
- Java개념
- 다이나믹 프로그래밍
- 알고리즘공부
- 자바
- 백준9단계
- 동적계획법
- 자바의정석연습문제풀이
- 브루트포스
- 백트래킹
- 자바공부
- dp
- dfs
- 백준자바
- 백준알고리즘
- Today
- Total
더 많이 실패하기
공부 189일차: 백준 7562번 나이트의 이동 자바 java 본문
7562 나이트의 이동
https://www.acmicpc.net/problem/7562
7562번: 나이트의 이동
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수
www.acmicpc.net
백준 7562번 문제 나이트의 이동
문제
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 45566 | 23188 | 17264 | 49.835% |
문제
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?

입력
입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다.
각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다.
출력
각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다.
예제 입력 1
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
예제 출력 1
5
28
0
과정 생각해보기 & 오답
최단거리, 최솟값 => BFS

이렇게 8방향으로 움직여야 한다는 것만 알면 쉬운 문제다
https://gimbalja.tistory.com/339
공부 187일차: 백준 2178번 미로 탐색 자바 java
2178 미로 탐색 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로
gimbalja.tistory.com
이 문제와 유사!
정답 인정 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import java.io.*;
import java.util.*;
public class Main {
static int testCase, l, startX, startY, goalX, goalY;
static int[][] matrix;
static boolean[][] visited;
static int[] dx = {-2, -2, -1, -1, 1, 1, 2, 2};
static int[] dy = {-1, 1, 2, -2, -2, 2, -1, 1};
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
testCase = Integer.parseInt(br.readLine());
for(int i = 0; i < testCase; i++) {
l = Integer.parseInt(br.readLine());
matrix = new int[l][l];
visited = new boolean[l][l];
// 시작
st = new StringTokenizer(br.readLine());
startX = Integer.parseInt(st.nextToken());
startY = Integer.parseInt(st.nextToken());
// 목적지
st = new StringTokenizer(br.readLine());
goalX = Integer.parseInt(st.nextToken());
goalY = Integer.parseInt(st.nextToken());
BFS(startX, startY);
System.out.println(matrix[goalX][goalY]);
}
}
static void BFS(int x, int y) {
Queue<Node> q = new LinkedList<>();
q.add(new Node(x, y));
visited[x][y] = true; // 방문처리
while(!q.isEmpty()) {
Node next = q.poll();
if(next.x == goalX && next.y == goalY) {
return; // 목적지에 도착했다면
}
for(int i = 0; i < 8; i++) { // 나이트가 이동할 수 있는 8방향
int X = next.x + dx[i];
int Y = next.y + dy[i];
if(X > -1 && X < l && Y > -1 && Y < l) { // 범위
if(!visited[X][Y]) {
q.add(new Node(X, Y));
visited[X][Y] = true;
matrix[X][Y] = matrix[next.x][next.y] + 1;
}
}
}
}
}
static class Node{
int x, y;
public Node(int x, int y) {
this.x = x;
this.y = y;
}
}
}
|
cs |
'알고리즘 > 백준' 카테고리의 다른 글
공부 191일차: 백준 16947번 서울 지하철 2호선 자바 java (0) | 2023.02.06 |
---|---|
공부 190일차: 백준 16929번 Two Dots 자바 java (0) | 2023.02.05 |
공부 188일차: 백준 7576번 토마토 자바 java (0) | 2023.02.03 |
공부 187일차: 백준 2178번 미로 탐색 자바 java (0) | 2023.02.02 |
공부 186일차: 백준 4963번 섬의 개수 자바 java (0) | 2023.02.01 |