Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 16953번: A → B 본문

Study/Algorithm

BOJ (C/C++) 16953번: A → B

hwooo 2022. 12. 2. 00:28

https://www.acmicpc.net/problem/16953

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net


풀이

2를 곱하는 경우와 뒷자리에 1을 붙이는 경우 각각 B보다 작을 경우에 재귀를 돌렸고, B가 됐을 때 cnt 값을 구하여 min 갱신.

이게 왜 BFS인지 모르겠어서 다른 분들 코드를 찾아보니 재귀 대신 큐를 사용하는 코드가 보였다. 확실히 이 방법으로 푼다면 -1을 출력하는 경우를 만들기 더 쉬웠을 것 같다. 

코드

#include <stdio.h>
int min = 0;
void Cal(long int now, int end, int cnt) {
	if (now == end) {
		if (!min) min = cnt;
		else if (cnt < min) min = cnt;
		return;
	}
    
	if (now * 2 <= end) Cal(now * 2, end, cnt + 1);
	if (now * 10 + 1 <= end) Cal(now * 10 + 1, end, cnt + 1);

	// 만들 수 없는 경우
	if (cnt == 1 && !min) min = -1;
}

int main() {
	int A, B;
    
	scanf("%d %d", &A, &B);
    
	Cal(A, B, 1);
	printf("%d", min);
    
	return 0;
}

 

'Study > Algorithm' 카테고리의 다른 글

BOJ (C/C++) 13023번: ABCDE  (0) 2022.12.03
BOJ (C/C++) 1261번: 알고스팟  (0) 2022.12.02
BOJ (C/C++) 1922번: 네트워크 연결  (0) 2022.12.01
BOJ (C/C++) 11403번: 경로 찾기  (0) 2022.12.01
BOJ (C/C++) 2747번: 피보나치 수  (0) 2022.12.01