Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 9019. DSLR ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 9019. DSLR

bba_dda 2021. 5. 26. 19:29
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

ํ’€์ด

BFS๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 0 ~ 9999 ๊นŒ์ง€ ์˜€๊ธฐ ๋•Œ๋ฌธ์—, 10000ํฌ๊ธฐ์˜ visited ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ด์šฉํ–ˆ๋‹ค.

 

์ฒ˜์Œ์— L๊ณผ R์„ ์ˆซ์ž๋ฅผ String์œผ๋กœ ๋ฐ”๊พธ์–ด์„œ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. 

๊ต‰์žฅํžˆ ์‚ฌ์†Œํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋งŽ์ด ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋ผ์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  main์— cin, cout ์ž…์ถœ๋ ฅ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ด ์•„์ฃผ ์กฐ๊ธˆ ๋” ์ค„์—ˆ๋‹ค. 

 

์ฝ”๋“œ

#include <iostream>
#include <queue>
#include <string>
using namespace std;

#define MAX 10000

bool visited[MAX];
string BFS(int A, int B) {
	queue<pair<int, string>> q;
	q.push(make_pair(A, ""));

	//string Bs = intToString(B);
	while (!q.empty()) {
		int num = q.front().first;
		string commend = q.front().second;
		q.pop();
		// D
		int D = (num * 2) % MAX;
		if (!visited[D]) {
			visited[D] = 1;
			q.push(make_pair(D, commend + 'D'));
			if (D == B) return commend + 'D';
		}
		// S
		int S = num - 1;
		if (S < 0) S = MAX - 1;
		if (!visited[S]) {
			visited[S] = 1;
			q.push(make_pair(S, commend + 'S'));
			if (S == B) return commend + 'S';
		}
		// L
		int L = (num * 10) % 10000 + num / 1000;
		if (!visited[L]) {
			visited[L] = 1;
			q.push(make_pair(L, commend + 'L'));
			if (L == B) return commend + 'L';
		}
		// R
		int R = (num / 10) + (num % 10) * 1000;
		if (!visited[R]) {
			visited[R] = 1;
			q.push(make_pair(R, commend + 'R'));
			if (R == B) return commend + 'R';
		}
	}
}
int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int T;
	cin >> T;
	for (int t = 0;t < T;t++) {
		fill(&visited[0], &visited[MAX], 0);
		int A, B;
		cin >> A >> B;
		string result = BFS(A, B);
		cout << result << endl;
	}
	return 0;
}

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•