본문 바로가기

ProgramSoliving

백준 : 13549

반응형

www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

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

www.acmicpc.net

 

package naver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class 숨바꼭질3 {
	/*
	 * 현재 시간 t
	 */
	static class Pair implements Comparable<Pair> {
		int x;
		int t;

		public Pair(int x, int t) {
			super();
			this.x = x;
			this.t = t;
		}

		@Override
		public int compareTo(Pair o) {
			return this.t - o.t;
		}
	}

	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());

		System.out.println(BFS(N, K));

	}

	public static int BFS(int n, int k) {

		int digit[] = new int[100001];	
		Arrays.fill(digit, 987654321);
		PriorityQueue<Pair> q = new PriorityQueue<Pair>();

		q.add(new Pair(n, 0));
		digit[n] = 0;

		while (!q.isEmpty()) {
			Pair cur = q.poll();
			// *2
			if (cur.x * 2 <= 100000 && digit[cur.x*2] > digit[cur.x]) {
				digit[cur.x*2] = digit[cur.x];
				q.add(new Pair(cur.x * 2, cur.t));
			}
			// 왼
			if (cur.x > 0 && digit[cur.x-1] > digit[cur.x]+1) {
				digit[cur.x-1] = digit[cur.x]+1;
				q.add(new Pair(cur.x - 1, cur.t + 1));
			}
			// 오
			if (cur.x < 100000 &&digit[cur.x+1] > digit[cur.x]+1) {
				digit[cur.x+1] = digit[cur.x]+1;
				q.add(new Pair(cur.x + 1, cur.t + 1));
			}

		}
		return digit[k];
	}
}
반응형

'ProgramSoliving' 카테고리의 다른 글

백준 : 19237 어른상어 java  (0) 2020.10.08
백준 : 19238 스타트 택시 (JAVA)  (0) 2020.10.07
백준 : 1519  (1) 2020.09.15
프로그래머스 : 여행경로  (0) 2020.09.12
프로그래머스 : 단어변환  (0) 2020.09.11