728x90
https://www.acmicpc.net/problem/9019
BFS로 진행했다.
#include<iostream>
#include<queue>
#include<string>
using namespace std;
#define D(s) ((2 * (s)) % 10000)
#define S(s) (((s) + 9999) % 10000)
#define L(s) (((s) % 1000) * 10 + ((s) / 1000))
#define R(s) (((s) / 10) + (((s) % 10) * 1000))
string bfs(int s, int e) {
int cur, next, tmp;
bool visit[10000] = { 0, };
string cur_c, next_c;
queue<pair<int, string>> q;
q.push(make_pair(s, ""));
while (!q.empty())
{
cur = q.front().first;
cur_c = q.front().second;
q.pop();
if (cur == e)
return cur_c;
tmp = D(cur);
if (!visit[tmp]) {
visit[tmp] = true;
q.push(make_pair(tmp, cur_c + "D"));
}
tmp = S(cur);
if (!visit[tmp]){
visit[tmp] = true;
q.push(make_pair(tmp, cur_c + "S"));
}
tmp = L(cur);
if (!visit[tmp]) {
visit[tmp] = true;
q.push(make_pair(tmp, cur_c + "L"));
}
tmp = R(cur);
if (!visit[tmp]) {
visit[tmp] = true;
q.push(make_pair(tmp, cur_c + "R"));
}
}
return "";
}
int main() {
int t, i, s, e;
string answer;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> s >> e;
cout << bfs(s, e) << '\n';
}
return 0;
}
파이썬으로 할때 같은 코드였지만 계속 메모리초과와 시간초과가 떠서 실패했다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1890 점프 C/C++ (0) | 2022.02.20 |
---|---|
[백준] 21317 징검다리 건너기 C++ (0) | 2022.02.19 |
[백준] 1717 집합의 표현 python (0) | 2022.02.17 |
[백준] 2239 스도쿠 python(pypy) (0) | 2022.02.16 |
[백준] 11779 최소비용 구하기 2 python (0) | 2022.02.15 |