백준/DFS BFS

[백준] 13549 : 숨바꼭질 3

믕비 2023. 4. 19. 17:43
반응형

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

 

13549번: 숨바꼭질 3

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

www.acmicpc.net

다익스트라(한 노드에서부터 모든 노드까지의 최단 경로 구하기)를 공부할 수 있던 문제였다. DP도 복습하면서 풀었음.

아직 BFS와 DFS의 활용문제가 잘 감이 오지 않는다.

 

내 코드

메모리 : 18488 KB

시간 : 160 ms

코드길이 : 1499 B

 

[내 코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static int N;
	static int K;
	static int result = Integer.MAX_VALUE;
    //해당 위치까지 가는 데에 걸리는 최소시간을 저장할 DP
	static int[] time = new int[100001];
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		Arrays.fill(time, Integer.MAX_VALUE);
		
		if(N == K)
			result = 0;
		else {
			findSister();
		}
		
		sb.append(result);
		System.out.print(sb);
	}
	
	public static void findSister() {
		Queue<Integer> queue = new LinkedList<>();
		time[N] = 0;
		queue.add(N);
		
		while(!queue.isEmpty()) {
			int now = queue.poll();
			//동생을 잡으면
			if(now == K) {
				result = time[K];
				return;
			}
			//앞으로 걷기
			if(now + 1 <= 100000 && time[now] + 1 < time[now + 1]) {
				time[now + 1] = time[now] + 1;
				queue.add(now + 1);
			}
			//뒤로 걷기
			if(now - 1 >= 0 && time[now] + 1 < time[now - 1]) {
				time[now - 1] = time[now] + 1;
				queue.add(now - 1);
			}
			//순간이동
			if(2 * now <= 100000 && time[now] < time[2 * now]) {
				time[2 * now] = time[now];
				queue.add(2 * now);
			}
		}
		return;
	}

}

 

반응형

'백준 > DFS BFS' 카테고리의 다른 글

[백준] 4803 : 트리  (0) 2024.09.06
[백준] 1697 : 숨바꼭질  (0) 2023.04.21
[백준] 11724 : 연결요소의 개수  (0) 2023.04.21
[백준] 13023 : ABCDE  (0) 2023.04.17
[백준] 1260 : DFS와 BFS  (0) 2023.04.17