[๋ฐฑ์ค] ๐ฅ 1697 ์จ๋ฐ๊ผญ์ง
๐ ๋์ด๋
๐ฅ Silver 1
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1697

๐ ํ์ด
์ฒ์ ์ด ๋ฌธ์ ๋ฅผ ๋ฑ ๋ณด์ ๋๋ ์๊ฐ์ BFS๋ ๊ทธ ์ด๋ค ์ฐ๊ด๋ ์์ด๋ณด์ด๋๋ฐ, ์ฐจ๋ผ๋ฆฌ DP๊ด๋ จ ๋ฌธ์ ๊ฐ ์๋๊ฐ? ํ๋ ์๊ฐ์ด์๋ค.
์๋ํ๋ฉด ๋ด๊ฐ ์ง๊ธ๊น์ง ํ์ด๋ณธ DP๋ฌธ์ ์์ ๋๋ ์ ์ ๋ฐ๋ก ์ ๋๋ก ๋ถ๋ถ์ ์ต์ ํด๊ฐ ์ ์ฒด์ ์ต์ ํด๊ฐ ๋์ง ์๋๋ค๋ ๊ฒ์ด์๋ค.
๊ทผ๋ฐ ๊ฐ๋งํ ์๊ฐํด๋ณด๋ DP์ BFS๋ฅผ ๋๋ค ์ด๋ฏธ ์ง๋ ๊ณณ์ ๋ํ ์ ๋ณด๋ฅผ ๊ทธ ์์น์ ์ ์ฅํ๊ณ , ๋ค์์ ๊ทธ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋๊ฒ ๋น์ทํ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋์ sujin๋ถํฐ ์์ํ์ง๋ง ๋ชจ๋ ๋ฐฐ์ด์ ์์น์ ์ง๊ธ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ์ ๋ฃ์ด์ ์ต์ข
sister์ ์์น์ ๋๋ฌํ ์๊ฐ์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ์ ํ์๋ค.
์ฒ์ BFS๊ด๋ จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ ํ๋๊น, ํจ์ฌ ์ฝ๊ฒ ํ๋ฆฌ๋ ๋๋์ด ๋ค์๋ค.
๐ Code
package BFS;
import java.io.*;
import java.util.*;
public class N1697 {
static int arr[];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int subin = Integer.parseInt(st.nextToken());
int sister = Integer.parseInt(st.nextToken());
int max = 100000;
arr = new int[max + 1];
Arrays.fill(arr, -1);
Queue<Integer> q = new LinkedList<>();
arr[subin] = 0;
q.add(subin);
if ( subin == sister){
System.out.println(0);
return;
}
int cur;
int nextPos;
int time = 0;
while (!q.isEmpty()) {
cur = q.poll();
nextPos = cur - 1;
time = arr[cur] + 1;
if (nextPos >= 0 && arr[nextPos] == -1) {
arr[nextPos] = time;
q.add(nextPos);
if (nextPos == sister) {
System.out.println(time);
break;
}
}
nextPos = cur + 1;
if (nextPos <= max && arr[nextPos] == -1) {
arr[nextPos] = time;
q.add(nextPos);
if (nextPos == sister) {
System.out.println(time);
break;
}
}
nextPos = 2 * cur;
if (nextPos <= max && arr[nextPos] == -1) {
arr[nextPos] = time;
q.add(nextPos);
if (nextPos == sister) {
System.out.println(time);
break;
}
}
}
}
}
package (์ด๋ฆ); ๋ฅผ ๋๊ณ , class ์ด๋ฆ์ Main์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐