Gidhub BE Developer

[BOJ] 9019. DSLR

2018-09-22
goodGid

Problem

Problem URL : DSLR


[1] Answer Code (18. 09. 22)

#include <iostream>
#include <queue>
#include <cstring>
#include <vector>
#define mod 10000
#define p pair<int, string>
using namespace std;

int visit[mod];

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int tc;
    cin >> tc;
    for(int i=0; i<tc; i++){
        memset(visit,0,sizeof(visit));
        int st;
        int dest;
        cin >> st >> dest;
        
        queue<p> q;
        q.push({st,""});
        
        while (! q.empty()) {
            int top = q.front().first;
            string operation = q.front().second;
            q.pop();
            
            if( top == dest) {
                cout << operation << endl;
                break;
            }

            int _top = top;
            operation += "D";
            if( ! visit[_top * 2 % mod] )
                q.push( { _top * 2 % mod, operation } );
            visit[ _top * 2 % mod ] = 1;
            operation.pop_back();
            
            _top = _top == 0 ? 9999 : _top - 1;
            operation += "S";
            if( ! visit[_top ] )
                q.push( { _top, operation } );
            visit[ _top ] = 1;
            operation.pop_back();
            
            operation += "L";
            _top = top / 1000;
            _top += top % 1000 * 10;
            if( ! visit[_top ] )
                q.push( {_top, operation } );
            visit[ _top ] = 1;
            operation.pop_back();
            
            operation += "R";
            _top = top % 10;
            _top = (top / 10) + (_top * 1000);
            if( ! visit[_top ] )
                q.push( { _top, operation } );
            visit[ _top ] = 1;
            operation.pop_back();
            
        } // end of while
    } // end of for i
    
    return 0;
}

Review

  • S: S 는 n에서 1 을 뺀 결과 n-1을 레지스터에 저장한다. n이 0 이라면 9999 가 대신 레지스터에 저장된다.

  • 문제를 잘못 읽어서 _top = _top -1 == 0 ? 9999 : _top - 1;로 했더니 런타임 에러가 떴다.

  • _top이 0일 때 9999로 바꿔야하는데 나는 _top가 1일 때 9999로 바꿨다.

  • 시간 초과도 뜨고 런타임, 메모리 초과 모든 에러를 다 겪어본 최악의 문제이다.


Recommend

Index