기억보다는 기록을 해볼까

DSLR 9019 (백준으로 C++공부하기 26일차) 본문

백준으로 C++ 공부하기

DSLR 9019 (백준으로 C++공부하기 26일차)

옥상에서 2021. 12. 7. 20:52
728x90

음 맨 처음에 숫자를 문자열로 받을지 아니면 정수형으로 받을지 고민함.

좀 오래거림

큐에 string형도 넣을 수 있다.

이런 식으로 string 형에 출력을 할 때 + "문자" 식으로도 출력을 할 수 있다.

cout << dslr + "D";

 

#include <iostream>
#include <queue>
#include <cmath>
#include <vector>
using namespace std;

typedef pair<int, string> pii;
int T;
int str;
int ans; 

void dfs() {
    bool vst[10000] = {false};
    bool Dno = false;
    queue<pii> q;
    string a;
    q.push({str, a});
    while(!q.empty()) {
        int num = q.front().first;
        string dslr = q.front().second;
        q.pop();
        //D
        int Dnum = num;
        Dnum = (Dnum * 2) % 10000;
            
        if(!vst[Dnum]){
            q.push({Dnum, dslr + "D"});
            vst[Dnum] = true;
            if(Dnum == ans) {
                cout << dslr + "D";
                return;
            }
        }
        //S
        int Snum = num;
        if (Snum == 0) {
            Snum = 9999;
            if(!vst[Snum]){
                q.push({Snum, dslr + "S"});
                vst[Snum] = true;
                if(Snum == ans) {
                    cout << dslr +"S";
                    return;
                }
            }
        }
        else {
            Snum = Snum - 1;
            if(!vst[Snum]){
                q.push({Snum, dslr + "S"});
                vst[Snum] = true;
                if(Snum == ans) {
                    cout << dslr + "S";
                    return;
                }
            }
        }
        //L
        int Lnum = num;
        int Ltmp = Lnum / 1000;
        Lnum *= 10;
        Lnum %= 10000;
        Lnum += Ltmp;
        if(!vst[Lnum]){
            q.push({Lnum, dslr + "L"});
            vst[Lnum] = true;
            if(Lnum == ans) {
                cout << dslr + "L";
                return;
            }
        }
        //R
        int Rnum = num;
        int Rtmp = Rnum % 10;
        Rnum /= 10;
        Rnum += Rtmp * 1000;
        if(!vst[Rnum]){
            q.push({Rnum, dslr + "R"});
            vst[Rnum] = true;
            if(Rnum == ans) {
                cout << dslr +"R";
                return;
            }
        }
    }
    
}
int main() {
    cin >> T; 
    while(T--) {
        cin >> str;
        cin >> ans;
        dfs();
        cout << "\n";
    }
}
728x90
Comments