[백준 9019] DSLR (C++)

Jangmanbo·2022년 4월 2일
1

백준

목록 보기
1/2

풀고 나니 평범한 bfs 문제인데 시행착오가 좀 있었다^^

  1. 방문 체크 안함 -> 메모리 초과
  2. visit 배열 초기화 안함 -> 런타임 에러
  3. visit 배열 초기화 (아님 전역변수로 선언하고 매번 초기화하든가..) -> 통과



전체 코드

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


void bfs(int A, int B)
{
	int DSLR[4];
	char func[4] = { 'D', 'S', 'L', 'R' };
	bool visit[10000] = {};

	int num;
	string inst;
	queue<pair<string, int>> q;

	q.push({ "", A });
	visit[A] = true;
	while (true)
	{
		inst = q.front().first, num = q.front().second;
		q.pop();

		if (B == num)
		{
			cout << inst << '\n';
			break;
		}

		// DSLR 연산 수행
		DSLR[0] = (num * 2) % 10000;
		DSLR[1] = (num == 0) ? 9999 : num - 1;
		DSLR[2] = num / 1000 + (num % 1000) * 10;
		DSLR[3] = num / 10 + (num % 10) * 1000;

		for (int i = 0; i < 4; i++)
		{
			if (!visit[DSLR[i]])
			{
				visit[DSLR[i]] = true;
				q.push({ inst + func[i], DSLR[i] });
			}
		}
	}
}

void solve()
{
	int A, B;
	cin >> A >> B;
	bfs(A, B);
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL);

	int T;
	cin >> T;

	while (T--)
		solve();
}

0개의 댓글