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
- 한국투자증권 해외주식 양도세
- 테스트 자동화
- 피보나치함수 예제
- js 자동완성
- bfs 미로탐색 java
- 주식 양도세 신고방법
- 재귀 예제
- 한국투자증권 양도세 신고
- 국세청 해외주식 양도세 신고방식
- 피보나치함수
- recursion example
- java.sql.SQLSyntaxErrorException
- git 연동
- oracle group by
- 최대공약수 예제
- 해외주식 양도세 신고
- 해외증권 양도세 한국투자증권
- katalon 사용법
- katalon 비교
- katalon 자동화
- katalon xpath
- tomcat log
- CSTS 폭포수 모델
- 재귀함수 예제
- 피보나치 예제
- Katalon Recorder 사용법
- javascript 자동완성
- katalon
- 톰캣 실시간 로그
- 홈택스 해외주식 양도세
Archives
- Today
- Total
엄지월드
백준 7562 나이트의 이동 본문
문제 접근
- 8가지 방향으로 이동하는 문제이다.
- DFS로 분류하고 문제를 선택한 것으로 인지 했었어서 어떻게 풀어야 하나 고민했다.
아무리 고민해 봐도 BFS 문제로 보여서 문제의 분류를 보니 BFS였다.
헷갈렸던 부분
- for문 안에서 이동 횟수를 1을 더해주니 여러번 움직였을 때에 cnt 출력 값은 맞았지만,
1번만 이동 했을 때에 cnt 출력 값은 0으로 나오는 문제가 있었다.
문제를 파악해보니, for문을 돌 때마다 People의 cnt 값을 더해주기 때문에 올바르지 못한 방법이었다.
그래서 고민한 결과 for문 위로 cnt 값을 빼주어서 해결하였다.
- 오랫만에 BFS 풀었던 문제이다. 잊지 않도록 한번씩 리마인드 겸으로 풀어주면 좋을듯하다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int N;
static boolean[][] visited;
static class People{
int x;
int y;
int cnt;
public People(int x, int y, int cnt) {
this.x = x;
this.y = y;
this.cnt = cnt;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int loop = Integer.parseInt(br.readLine());
for(int i=0; i<loop; i++){
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int startX = Integer.parseInt(st.nextToken());
int startY = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int endX = Integer.parseInt(st.nextToken());
int endY = Integer.parseInt(st.nextToken());
visited = new boolean[N][N];
System.out.println(bfs(startX, startY, endX, endY));
}
}
public static int bfs(int sx, int sy, int ex, int ey){
if(sx == ex && sy == ey) return 0;
int dx[] = {1, 2, 2, 1, -1, -2, -1, -2};
int dy[] = {2, 1, -1, -2, 2, 1, -2, -1};
visited[sx][sy] = true;
Queue<People> q = new LinkedList<>();
q.add(new People(sx, sy, 0));
while(!q.isEmpty()) {
People p = q.poll();
int cnt = p.cnt;
cnt += 1;
for (int i = 0; i < dx.length; i++) {
int nx = dx[i] + p.x;
int ny = dy[i] + p.y;
if (nx == ex && ny == ey) {
return cnt;
}
if (nx < 0 || ny < 0 || nx >= N || ny >= N) continue;
if (visited[nx][ny]) continue;
visited[nx][ny] = true;
q.add(new People(nx, ny, cnt));
}
}
return 0;
}
}
'알고리즘' 카테고리의 다른 글
백준 11725 트리의 부모 찾기(DFS) (0) | 2022.08.26 |
---|---|
백준 1987 알파벳(DFS) (0) | 2022.08.23 |
백준 2468 안전영역 (0) | 2022.08.19 |
[Leetcode] sliding window median java (0) | 2022.08.13 |
[프로그래머스] 가사 검색 (0) | 2022.08.11 |
Comments