문제(출처: https://www.acmicpc.net/problem/25418)
< 정수 a를 k로 만들기 >
문제 풀이
bfs를 활용해서 문제를 해결했다.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _25418_ { // 정수 a를 k로 만들기
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
boolean visited[] = new boolean[1000001];
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[] { a, 0 });
int result = 0;
while (!queue.isEmpty()) {
int temp[] = queue.poll();
if (temp[0] * 2 <= 1000000 && !visited[temp[0] * 2]) {
if (temp[0] * 2 == k) {
result = temp[1] + 1;
break;
}
visited[temp[0]*2]=true;
queue.add(new int[] { temp[0] * 2, temp[1] + 1 });
}
if (temp[0] + 1 <= 1000000 && !visited[temp[0] + 1]) {
if (temp[0] + 1 == k) {
result = temp[1] + 1;
break;
}
visited[temp[0]+1]=true;
queue.add(new int[] { temp[0] + 1, temp[1] + 1 });
}
}
System.out.println(result);
}
}
Main
변수)
a : 입력값
k : 입력값
visited : 방문 여부
queue : [정수, 연산 횟수]
result : 최소 연산 횟수
- 입력 값 정수(a, k) 입력
- queue에 시작값으로 a와 연산 횟수 0을 배열로 넣음
- queue가 빌 때까지 반복
1) queue에서 꺼낸 값에서 2를 곱한 값이 범위 안이며 아직 방문하지 않았다면 방문 표시 및 queue에 추가
2) queue에서 꺼낸 값에서 1을 더한 값이 범위 안이며 아직 방문하지 않았다면 방문 표시 및 queue에 추가
: 각 경우에서 k 값과 일치하다면 종료
- result 출력
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 25416_빠른 숫자 탐색 (0) | 2023.07.31 |
---|---|
[Baekjoon] 18404_현명한 나이트 (0) | 2023.07.28 |
[Baekjoon] 12852_1로 만들기 2 (0) | 2023.07.25 |
[Baekjoon] 21773_가희와 프로세스 1 (0) | 2023.07.24 |
[Baekjoon] 21939_문제 추천 시스템 Version 1 (0) | 2023.07.24 |