https://www.acmicpc.net/problem/9019
Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.netvector<int> make_nxt(int n)
{
vector<int> tmp;
tmp.push_back(n * 2 % 10000);
tmp.push_back(n - 1 < 0 ? 9999 : n - 1);
int lshift = n;
lshift *= 10;
lshift = (lshift + lshift / 10000)%10000;
tmp.push_back(lshift);
int rshift = n;
int one = rshift % 10;
rshift = rshift / 10 + one * 1000;
tmp.push_back(rshift);
return tmp;
}
void bfs(int start)
{
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty())
{
int n = q.front();
if (n == target)
{
cout << order[target] << '\n';
break;
}
q.pop();
vector<int> nxt = make_nxt(n);
for (int i = 0; i < 4; i++)
{
if (visited[nxt[i]]) continue;
q.push(nxt[i]);
visited[nxt[i]] = true;
order[nxt[i]] = order[n] + cmd[i];
}
}
}
vector<int> nxt = make_nxt(n);
for (int i = 0; i < 4; i++)
이 부분
make_nxt 함수 삭제하고
for (int nxt : {n*2%10000, n-1 <0? 9999:n-1, n/1000+n*10 %10000, (n%10)*1000+n/10})
이걸로 바꾸니깐 바로 통과했는데
쓸데없이 vector 복사시키는 함수 만들어서 시간초과 문제생긴거 맞나요?
처음에는 leftshift랑 rightshift가 저렇게 간단하게 생각이 안났음.
댓글 0