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

 

16953번: A → B

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

www.acmicpc.net

쉽네요.

그리드 문제라는데 솔직히 BFS 문제같네요.

#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
using namespace std;

struct Point {
	int i, j, t, cnt;
	char c;
};

void Prints(vector<vector<int>>maps, int n, int m) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << maps[i][j];
		}
		cout << endl;
	}
	cout << endl;
}

void Prints(vector<vector<bool>>maps, int n, int m) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << maps[i][j];
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<vector<char>>maps, int n, int m) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cout << maps[i][j];
		}
		cout << endl;
	}
	cout << endl;
}
void Prints(vector<vector<vector<char>>>maps, int n, int m, int k) {
	for (int t = 0; t < k; t++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cout << maps[t][i][j];
			}
			cout << endl;
		}
		cout << endl;
	}
	cout << endl;
}

void Prints(vector<vector<vector<bool>>>maps, int n, int m, int k) {
	for (int t = 0; t < k; t++) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				cout << maps[t][i][j];
			}
			cout << endl;
		}
		cout << endl;
	}
	cout << endl;
}
struct Data {
	long index;
	int cnt;
};

struct Word {
	std::string word;
	int count;
};
int main() {
	long A;
	long B;
	cin >> A >> B;
	Data d;
	d.index = A;
	d.cnt = 1;
	queue<Data>q;
	q.push(d);
	long da = B - A;
	//cout << da;
	vector<bool>bVisited(B,false);


	if (A == B) {
		cout << 0;
		return 0;
	}
	bool bEnd = false;
	while (!q.empty()) {
		Data start = q.front();
		
		q.pop();
		long dirx=0;
		//int dirp=0;
		long end = B;
		if (bEnd == true) {
			//cout << start.cnt+1 ;
			break;
		}
		
		for (int i = 0; i < 2; i++) {
			

			if (i == 0) {
				//x2
				dirx = start.index * 2;
			}
			else if (i == 1) {
				//+1
				//dirx 
				string tmp= to_string(start.index);
				tmp = tmp + "1";
				dirx = stol(tmp);
			}
			if (dirx ==B ) {
				cout << start.cnt + 1;
				bEnd = true;
				i = 2;
				continue;
			}
			if (dirx >= B) {
				
				continue;
			}
			if (bVisited[dirx] == false) {
				bVisited[dirx] = true;
				Data tmpD;
				tmpD.index = dirx;
				
				tmpD.cnt = start.cnt + 1;
			
				q.push(tmpD);
			}

		}

      
	}
	if (bEnd == false) {
		cout<<-1;
	}
	return 0;
}

'알고리즘 공부' 카테고리의 다른 글

백준 양  (0) 2023.07.21
백준 잃어버린 괄호  (0) 2023.07.20
백준 보물섬  (0) 2023.07.19
백준 동전0  (0) 2023.07.18
백준 서강근육맨  (0) 2023.07.18

+ Recent posts