[๋ฐฑ์ค€ 9019] DSLR

๋„์œคยท2023๋…„ 7์›” 14์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
42/71

๐Ÿ”—์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ์ธํ•ด ๊ฝค๋‚˜ ๊ณ ์ƒํ–ˆ๋˜ ๋ฌธ์ œ, BFS๋ฅผ ์ด๋ ‡๊ฒŒ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ตฌ๋‚˜๋ผ๋Š” ์ƒ๊ฐ์ด ๋“œ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

๋ฌธ์ œ ๋ถ„์„

์ด ๋ฌธ์ œ๋Š” A๊ฐ€ B๊ฐ€ ๋ ๋•Œ ๊นŒ์ง€ ์‚ฌ์šฉ๋˜๋Š” ์ปค๋งจ๋“œ๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ์ด๋‹ค.

D: n์— 2๋ฅผ ๊ณฑํ•œ ํ›„ 10000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’
S: n์—์„œ 1์„ ๋บ€ ๊ฐ’, ๋งŒ์•ฝ 0๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค๋ฉด 9999
L: n์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
R: n์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „

์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ปค๋งจ๋“œ๋Š” ์œ„์— 4๊ฐœ์™€ ๊ฐ™๋‹ค.

๋ฐœ์ƒ

์ด ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๋„˜๋ฒ„์—์„œ 4๊ฐ€์ง€์˜ ์ปค๋ฉ˜๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ๊ฐ’์„ ์ฐพ์•„๋‚ด๊ณ  ์ปค๋ฉ˜๋“œ๋ฅผ ๋”ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.

int L(int origin){
    int temp = origin;
    int ten = pow(10, digit(origin));

    temp /= ten;

    return (origin - temp * ten) + temp;
}

int R(int origin){
    int d = digit(origin);

    int temp = origin % 10;
    origin /= 10;

    return origin + temp * pow(10, d);
}

๋‚ด๊ฐ€ ์ฒ˜์Œ์— ๊ตฌํ˜„ํ•œ L๊ณผ R์˜ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. Lํ•จ์ˆ˜๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ์™ผ์ชฝ์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•˜์—ฌ origin์˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ตฌํ•ด origin์˜ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋‹ด๋Š” temp๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด origin์— ๋”ํ•œ ํ›„ origin์˜ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋นผ์ฃผ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ์ž˜๋ชป ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์€ n์€ ํ•ญ์ƒ d1 d2 d3 d4 4์ž๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

n = 123 ( 0 1 2 3 )

L์—ฐ์‚ฐ -> 1230
R์—ฐ์‚ฐ -> 3012

ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋งŒ์กฑํ•˜๋„๋ก ์ˆ˜์‹์„ ์ˆ˜์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

int L(int origin){
    return (origin % 1000) * 10 + (origin / 1000);
}

int R(int origin){
    return origin / 10 + (origin % 10) * 1000;
}

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. a์™€ b์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  2. a๊ฐ’์„ ์‹œ์ž‘์œผ๋กœ D, S, L, R ์—ฐ์‚ฐ์„ ์‹œ์ž‘ํ•œ๋‹ค.
  3. ์—ฐ์‚ฐ ํ›„์˜ ๊ฐ’์ด ์•„์ง ํƒ์ƒ‰ํ•˜์ง€์•Š์€ ๊ฐ’์ด๋ผ๋ฉด ํ˜„์žฌ๊นŒ์ง€์˜ ์ปค๋งจ๋“œ์— ํ•ด๋‹น ์ปค๋งจ๋“œ๋ฅผ ๋”ํ•ด ์ €์žฅํ•˜์—ฌ์ค€๋‹ค.
  4. b์— ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ฝ”๋“œ

#include<iostream>
#include<queue>

using namespace std;

int D(int origin);
int S(int origin);
int L(int origin);
int R(int origin);

void check_num(int next, queue<pair<int, string>> &q, bool* check, string cmd){
    if(check[next] == true)
        return;

    check[next] = true;
    q.push({ next, cmd });
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

    int t;

    cin >> t;

    while(t--){
        int a;
        int b;

        bool check[10001] = {};

        cin >> a >> b;

        queue<pair<int, string>> q;
        q.push({ a, "" });
        check[a] = true;

        while(!q.empty()){
            pair<int, string> node = q.front();
            q.pop();

            if(node.first == b){
                cout << node.second << "\n";
                break;
            }

            check_num(D(node.first), q, check, node.second + "D");
            check_num(S(node.first), q, check, node.second + "S");
            check_num(L(node.first), q, check, node.second + "L");
            check_num(R(node.first), q, check, node.second + "R");
        }
    }
}

int D(int origin){
    return (origin * 2) % 10000;
}

int S(int origin){
    return (origin - 1 >= 0 ? origin - 1 : 9999);
}

int L(int origin){
    return (origin % 1000) * 10 + (origin / 1000);
}

int R(int origin){
    return origin / 10 + (origin % 10) * 1000;
}
profile
Game Client Developer

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 10์›” 5์ผ

๋งŽ์ด ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ