From 1d2c73010ae84c05d11147a2706c94e29b083ef8 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Sat, 15 Mar 2025 23:55:33 +0900 Subject: [PATCH] =?UTF-8?q?[Gold=20V]=20Title:=20=EC=88=A8=EB=B0=94?= =?UTF-8?q?=EA=BC=AD=EC=A7=88=203,=20Time:=20176=20ms,=20Memory:=2038648?= =?UTF-8?q?=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Gold/13549. 숨바꼭질 3/README.md | 30 ++++++++++++++++++++++ 백준/Gold/13549. 숨바꼭질 3/숨바꼭질 3.py | 31 +++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 백준/Gold/13549. 숨바꼭질 3/README.md create mode 100644 백준/Gold/13549. 숨바꼭질 3/숨바꼭질 3.py diff --git a/백준/Gold/13549. 숨바꼭질 3/README.md b/백준/Gold/13549. 숨바꼭질 3/README.md new file mode 100644 index 0000000..e7ea12a --- /dev/null +++ b/백준/Gold/13549. 숨바꼭질 3/README.md @@ -0,0 +1,30 @@ +# [Gold V] 숨바꼭질 3 - 13549 + +[문제 링크](https://www.acmicpc.net/problem/13549) + +### 성능 요약 + +메모리: 38648 KB, 시간: 176 ms + +### 분류 + +0-1 너비 우선 탐색, 너비 우선 탐색, 데이크스트라, 그래프 이론, 그래프 탐색, 최단 경로 + +### 제출 일자 + +2025년 3월 15일 23:55:00 + +### 문제 설명 + +
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다.
+ +수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
+ +### 입력 + +첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
+ +### 출력 + +수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
+ diff --git a/백준/Gold/13549. 숨바꼭질 3/숨바꼭질 3.py b/백준/Gold/13549. 숨바꼭질 3/숨바꼭질 3.py new file mode 100644 index 0000000..d13641f --- /dev/null +++ b/백준/Gold/13549. 숨바꼭질 3/숨바꼭질 3.py @@ -0,0 +1,31 @@ +import sys +from collections import deque + +input = sys.stdin.readline + +n, K = map(int, input().split()) + +queue = deque([n]) +dist = [-1 for _ in range(100001)] +ways = [0 for _ in range(100001)] + +dist[n] = 0 +ways[n] = 1 + +while queue: + k = queue.popleft() + for i in (k-1, k+1, k*2): + if 0 <= i < 100001: + if dist[i] == -1: + if (i == k*2): + dist[i] = dist[k] + ways[i] = ways[k] + queue.appendleft(i) + else: + dist[i] = dist[k] + 1 + ways[i] = ways[k] + queue.append(i) + elif dist[i] == dist[k] + 1: + ways[i] += ways[k] + +print(dist[K]) \ No newline at end of file