https://www.acmicpc.net/problem/16397
16397번: 탈출
첫 번째 줄에 N (0 ≤ N ≤ 99,999), T (1 ≤ T ≤ 99,999), G (0 ≤ G ≤ 99,999)가 공백 하나를 사이에 두고 주어진다. 각각 N은 LED로 표현된 수, T는 버튼을 누를 수 있는 최대 횟수, G는 탈출을 위해 똑같이
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int T = Integer.parseInt(st.nextToken());
int G = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[100000];
Queue<int[]> q = new LinkedList<>();
q.offer(new int[] { N, 0 });
while (!q.isEmpty()) {
int[] a = q.poll();
if (a[0] == G) {
System.out.print(a[1]);
return;
}
if (T <= a[1]) continue;
if (a[0] < 99999 && !visited[a[0] + 1]) {
q.offer(new int[] { a[0] + 1, a[1] + 1 });
visited[a[0] + 1] = true;
}
if (a[0] * 2 < 99999) {
a[0] *= 2;
int x = (int) Math.pow(10, (int) Math.log10(a[0]));
if (visited[a[0] - x]) continue;
q.offer(new int[] { a[0] - x, a[1] + 1 });
visited[a[0] - x] = true;
}
}
System.out.print("ANG");
}
}
'OJ' 카테고리의 다른 글
[BOJ] 11003 최솟값 찾기 (JAVA) (1) | 2023.04.30 |
---|---|
[BOJ] 5297 키로거 (JAVA) (1) | 2023.04.29 |
[BOJ] 14231 박스 포장 (JAVA) (0) | 2023.04.27 |
[BOJ] 4375 1 (JAVA) (0) | 2023.04.26 |
[BOJ] 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (JAVA) (0) | 2023.04.25 |