[BOJ Gold4]DSLR Kotlin


質問する


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

に答える

  • 題を見ると、BFSを思い出して、実現と回転して、タイムアウトしました.L,R処理をstring処理に変えるのは少し複雑なようですが、この部分は時間がかかりそうです.
  • コード#コード#

    import java.util.*
    
    fun main() = with(System.`in`.bufferedReader()){
        val n = readLine().toInt()
        for(i in 1..n){
            val (a,b) = readLine().split(" ").map{it.toInt()}
            val visit = BooleanArray(10000){false}
            val regist = Array(10000){""}
            bfs(a,b, visit, regist)
        }
    }
    
    fun bfs(start : Int, target : Int, visit : BooleanArray, regist : Array<String>){
        val q = LinkedList<Int>()
        q.add(start)
        visit[start] = true
        while(!q.isEmpty()){
            val current = q.poll()
            if(current==target){
                println(regist[target])
                return
            }
            val D = (current*2)%10000
            val S = if(current==0) 9999 else current-1
            val L = (current%1000) * 10 + current/1000
            val R = (current%10) * 1000 + current/10
    
            if(!visit[D]){
                q.add(D);
                visit[D]=true;
                regist[D]=regist[current] + "D";
            }
    
            if(!visit[S]){
                q.add(S);
                visit[S]=true;
                regist[S]=regist[current] + "S";
            }
            if(!visit[L]){
                q.add(L);
                visit[L]=true;
                regist[L]=regist[current] + "L";
            }
            if(!visit[R]){
                q.add(R);
                visit[R]=true;
                regist[R]=regist[current] + "R";
            }
        }
    }