//0에 대해 예외 처리를 해야할 것 같은데,,,,,
#include <stdio.h>
#include <memory.h>
#include <queue>
#include <vector>

char w[5]="DSLR";
int d[10010];
int A, B;
std::queue<int> q;

void f(int a) {
    //debug : printf("%d : %d\n",a , d[a]);
    if(a==A) return;
    else f(d[a]);

    int nA=d[a];

    if((d[a]*2)%10000==a) printf("D");
    else if((d[a]-1)==a||(d[a]+9999)==a) printf("S");
    else if(a==(d[a]%1000)*10+(d[a]/1000)) printf("L");
    else if(a==(d[a]%10)*1000+(d[a]/10)) printf("R");
    else printf("?");
}

int main() {

    //초기화
    std::vector<int> v[10010];
    for(int i=0; i<10000; i++) {
            int d=i*2, s=i-1, l=(i%1000)*10+(i/1000), r=(i%10)*1000+(i/10);
            if(d>9999) d%=10000;
            if(s<0) s+=10000;

            v[i].push_back(d);
            v[i].push_back(s);
            v[i].push_back(l);
            v[i].push_back(r);
    }
    
    int n;
    scanf("%d", &n);

    for(int i=0; i<n; i++) {
        
        scanf("%d %d", &A, &B);

        //초기화 : 전 위치 저장
        memset(d, -1, sizeof(d));
        d[A]=10001;
        q.push(A);

        while(!q.empty()) {
            int S=q.front();
            q.pop();

            for(int i=0; i<4; i++) {
                if(d[v[S][i]]==-1) {
                    //printf("%d ", v[S][i]);
                    q.push(v[S][i]);
                    d[v[S][i]]=S;
                }
            }
            //puts("");
        }
        
        f(B);
        puts("");   
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: