일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- dfs
- 문자열
- 다리 만들기
- 구현
- Stack
- 그리디
- SQL
- 아스키코드
- 백트래킹
- oracle
- 완전탐색
- Queue
- 시뮬레이션
- 빅데이터
- BufferedReader
- 배열
- 새벽코딩
- Python
- LIS
- 탐색
- Java
- 알고리즘
- 백준
- 브루트포스
- 스택
- 다이나믹프로그래밍
- DP
- 프로그래머스
- HashMap
- BFS
Archives
- Today
- Total
새벽코딩
[백준] [16953] A -> B 본문
반응형
문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
예제 입력 1 복사
2 162
예제 출력 1 복사
5
2 → 4 → 8 → 81 → 162
예제 입력 2 복사
4 42
예제 출력 2 복사
-1
예제 입력 3 복사
100 40021
예제 출력 3 복사
5
100 → 200 → 2001 → 4002 → 40021
※코드
import java.io.*;
import java.util.*;
public class Main {
static boolean [] visited;
static HashMap<Long, Integer> dap;
static long A, B;
static void BFS(long s) {
Queue<Long> q = new LinkedList<>();
q.offer(s);
dap.put(s, 1);
while(!q.isEmpty()) {
long now = q.poll();
long nextP1 = now * 2;
long nextP2 = Long.parseLong(String.valueOf(now) + String.valueOf(1));
if(nextP1 <= B && !dap.containsKey(nextP1)){
q.offer(nextP1);
dap.put(nextP1, dap.get(now)+1);
}
if(nextP2 <= B && !dap.containsKey(nextP2)) {
q.offer(nextP2);
dap.put(nextP2, dap.get(now)+1);
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
dap = new HashMap<>();
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
BFS(A);
int result = -1;
if(dap.containsKey(B)) result = dap.get(B);
System.out.println(result);
}
}
※생각정리
입력된 A값에 곱하기 2 또는 뒤에 1을 붙인수로 계속해서 값을 이어 붙여 큐에 담았다. 연산한 값이 B값을 넘으면 더이상 큐에 담지 않으면서 같은 방법을 반복했다.
배열에 담으면 메모리초과를 피할 수 없기 때문에 필요한 값만 담기위해 HashMap을 이용해 해당 숫자까지 오는데 걸린 가중치를 담았다.
-새벽코딩-
반응형
'알고리즘' 카테고리의 다른 글
[백준] [5567] 결혼식 (JAVA) (0) | 2022.12.14 |
---|---|
[백준] [2178] 미로탐색 (JAVA) (0) | 2022.12.13 |
[백준] [1743] 음식물 피하기 (0) | 2022.12.11 |
[백준] [2644] 촌수계산 (2) | 2022.12.10 |
[백준] [11725] 트리의 부모 찾기 (0) | 2022.12.09 |