[๋ฐฑ์ค] ๐ฅ 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
์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐