Java

[백준 13549] 숨바꼭질 3 (JAVA)

iheeeee6-6 2023. 4. 25. 17:41
728x90

https://www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

최소시간으로 bfs를 사용하여 문제를 풀었다.

1. 좌표와 시간을 가진 객체 생성

2. 큐 생성하여 시작 좌표 add

3. 0~100000 범위에서 +1, -1, *2한 좌표를 가진 객체를 큐에 add

4. k에 도달하였을때, 시간을 확인하여 최솟값 여부 확인 !

 

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 Main {
	static class Node{
		int x;
		int time;
		Node(int x, int time){
			this.x=x;
			this.time=time;
		}
	}
	static boolean[] visited= new boolean[100001];
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		int result=Integer.MAX_VALUE;
		
		Queue<Node> q = new LinkedList<>();
		q.add(new Node(n,0));
		while(!q.isEmpty()) {
			Node node=q.poll();
			int x= node.x;
			int time=node.time;
			visited[x]=true;
			
			if(x==k) result= Math.min(result, time);
			
			if( x*2<=100000&&!visited[x*2])
				q.add(new Node(x*2,time));
			
			if( x+1<=100000&&!visited[x+1])
				q.add(new Node(x+1,time+1));
			
			if( x-1>=0&&!visited[x-1])
				q.add(new Node(x-1,time+1));
		}
		
		System.out.println(result);
	}
}

'Java' 카테고리의 다른 글

[백준 24337] 가희와 탑 (JAVA)  (0) 2023.04.27
[백준 1138] 한 줄로 서기 (JAVA)  (0) 2023.04.26
[백준 20437] 문자열 게임2 (JAVA)  (0) 2023.04.25
[백준 1446] 지름길 (JAVA)  (0) 2023.04.24
[백준 22233] 가희와 키워드 (JAVA)  (0) 2023.04.23