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

Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net

vector<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가 저렇게 간단하게 생각이 안났음.