ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 7562 나이트의 이동 #JAVA
    Algorithm Solving/BAEKJOON 2020. 12. 16. 21:31

     

    BAEKJOON [7562] 나이트의 이동


    코드


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    
    public class Main {
    
    	public static void main(String[] args) throws IOException{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		//나이트가 움직일 수 있는 8가지 방향
    		int[] dx = {-2,-1,1,2,2,1,-1,-2};
    		int[] dy = {1,2,2,1,-1,-2,-2,-1};
    		
    		int round = Integer.parseInt(br.readLine());
    		
    		for (int r = 0; r < round; r++) {
    			Queue<int[]> queue = new LinkedList<int[]>();
    			
    			int size = Integer.parseInt(br.readLine());
    			int[][] dist = new int[size][size];
    			
    			String[] start = br.readLine().split(" ");
    			String[] end = br.readLine().split(" ");
    			int start_x = Integer.parseInt(start[0]);
    			int start_y = Integer.parseInt(start[1]);
    			int end_x = Integer.parseInt(end[0]);
    			int end_y = Integer.parseInt(end[1]);
    			
    			queue.add(new int[] {start_x, start_y});
    			dist[start_x][start_y] = 1;
    			
    			while (!queue.isEmpty() && dist[end_x][end_y]==0) {
    				int[] temp = queue.poll();
    				
    				for (int i = 0; i < 8; i++) {
    					int nx = temp[0]+dx[i];
    					int ny = temp[1]+dy[i];
    					
    					if(nx<0 || ny<0 || nx>= size || ny >= size) continue;
    					if(dist[nx][ny] > 0) continue; //지나간 길
    					
    					dist[nx][ny] = dist[temp[0]][temp[1]] +1;
    					queue.add(new int[] {nx, ny});
    					
    				}
    				
    			}
    			System.out.println(dist[end_x][end_y]-1);
    		}
    	}
    
    }
    

     

     

     

    풀이


    • BFS
    • 나이트가 움직일 수 있는 방향은 8가지로 dx, dy 배열을 선언

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    댓글