https://www.acmicpc.net/problem/25418
25418번: 정수 a를 k로 만들기
7(A), 8(연산 1), 9(연산 1), 18(연산 2), 19(연산 1), 38(연산 2), 76(연산 2), 77(연산 1)이 최소 연산이므로 정답은 7이다.
www.acmicpc.net
package BOJ.bfs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_25418 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int start = stoi.apply(st.nextToken());
int end = stoi.apply(st.nextToken());
int result = bfs(start,end);
System.out.println(result);
}
private static int bfs(int start, int end) {
Queue<Integer> q = new LinkedList<>();
Set<Integer> visited = new HashSet<>();
q.offer(start);
visited.add(start);
int time = 0;
while(!q.isEmpty()){
int size = q.size();
for(int s = 0 ; s < size ; s++){
int num = q.poll();
if(num == end){
return time;
}
int next = num+1;
if(!visited.contains(next)){
q.offer(next);
visited.add(next);
}
next = 2 * num;
if(next > 2_000_000){
continue;
}
if(!visited.contains(next)){
q.offer(next);
visited.add(next);
}
}
time++;
}
return -1;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 옹알이 (JAVA) (0) | 2022.10.25 |
---|---|
백준 2775번 부녀회장이 될테야 (0) | 2022.10.24 |
프로그래머스 숫자 짝꿍 (JAVA) (0) | 2022.10.22 |
프로그래머스 롤케이크 자르기 (JAVA) (0) | 2022.10.21 |
프로그래머스 콜라 문제 (JAVA) (0) | 2022.10.20 |