16953번 A -> B

최성현·2021년 3월 23일
0

백준 문제풀이

목록 보기
25/29

문제링크

코드 설명

10^9을 넘은 연산이 가능하기때문에 long long 변환 이 필요하다 (dfs로 넘겨줄때도 당연히 longlong형으로 해야한다 ...여기서 오류 계속🤣)

dfs를 이용하여 모든 연산을 수행하고 B보다 커질시 return한다. longlong변환은 stoll을 써야하며 안쓰려면
(*10+1) 과같이 연산을 하는것도 좋아보인다.

bfs를 이용하는것이 물론 더 빨라보이므로 bfs 로도 다시풀자.

😊소스 코드

#include<iostream>
#include<string>
using namespace std;
long long A, B;
int result=1000000000;
bool flag;
void dfs(int level, long long A, long long B) {
	if (A == B) {
		
		if (result > level+1) {
			result = level+1;
			flag = true;
		}
		return;
	}
	else if(A>B){
		flag = false;
		return;
	}
	
	for (int i = 0; i < 2; i++) {
		if (flag == true) return;
		if (i == 0) {
			
			dfs(level + 1, A*2, B);
		}
		else {
			dfs(level + 1, stoll(to_string(A)+'1'), B);
		}
		
	}

}



int main() {
	cin >> A >> B;

	dfs(0,A, B);
	if(flag==true) cout << result;
	else {
		cout << -1;
	}



}
profile
후회없이

0개의 댓글