โ”๋ฌธ์ œโ”

1697.์ˆจ๋ฐ”๊ผญ์งˆ

๐Ÿ™ŒSolution๐Ÿ™Œ

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„๋•Œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ์ธ์ค„ ์•Œ๊ณ  ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ์—ด์‹ฌํžˆ ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

๊ณ„์† ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ๋„์ „ํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ๋ฌธ์ œ ๋ถ„๋ฅ˜๋ฅผ ๋ดค๋Š”๋ฐ BFS๋ฌธ์ œ์˜€๋‹ค..ใ…Ž

Try1) BFS๋กœ ํ’€์ด + ๋ฐฑํŠธ๋ž˜ํ‚น

์ฒ˜์Œ์—๋Š” ์ˆ˜๋นˆ์˜ ์œ„์น˜์ธ n์„ ๊ธฐ์ค€์œผ๋กœ bfs๋ฅผ ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๊ฑธ๋ ธ๋‹ค..

์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋˜ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ ์šฉํ•˜๋ฉด ์—ฐ์‚ฐ์ด ์ข€ ๋นจ๋ผ์ง€์ง€ ์•Š์„๊นŒ ํ•ด์„œ ์ ์šฉํ•ด๋ดค๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๋น ๋ฅด์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค..ใ…Ž

๊ฒฐ๊ตญ ์ด๊ฒƒ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ๋ฐ›์•˜๋‹คใ… ใ… 

fun bfs(n:Int,k:Int):Int{

    val queue=mutableListOf<Pair<Int,Int>>()//depth, n

    var time=0
    queue.add(0 to k)

    while(!queue.isEmpty()){

       // val mark=Array<Boolean>(k*2){false}
        val current=queue.first()

        queue.removeFirst()

        if(current.second==n){
            time=current.first
            break
        }
        else{
            if(current.second>n){
                if(current.second%2==0) {
                    queue.add(current.first + 1 to current.second / 2)
                }
                    queue.add(current.first+1 to current.second+1)
                    queue.add(current.first+1 to current.second-1)

            }else{
                queue.add(current.first+1 to current.second+1)
            }
        }
    }
    return time
}

Try2) BFS + ์ค‘๋ณต๊ฒ€์‚ฌ

๊ฒฐ๊ตญ ์œ„์—์„œ ์ž”๋œฉ ๋ป˜์ง“์„ ํ•˜๋‹ค๊ฐ€ ๋ชป ํ’€์–ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ•ด์„œ ํ’€์ด๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

BFS์— ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ๊ฐ™์ด ํ•ด์„œ ํ•„์š” ์—†๋Š” ์ค‘๋ณต ์—ฐ์‚ฐ์„ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์—ฐ์‚ฐ ์‹œ๊ฐ„์„ ์ค„์˜€๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์‹œ๋„ํ•ด๋ณด๊ธฐ๋„ ํ–ˆ์—ˆ๋Š”๋ฐ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•˜๋ฉด์„œ ํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ์ž๊พธ ํ—ท๊ฐˆ๋ ค์„œ ๊ทธ๋ƒฅ n ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฑธ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.

์ฃผ์˜ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ n>k์ผ ๋•Œ์ด๋‹ค! ๋‚˜๋Š” ์ฒ˜์Œ์— ์ด ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌ ์•ˆ ํ•ด๋‘๊ณ  ArrayIndexOutOfBounds๊ฐ€ ๋‚˜์˜ค๋‹ˆ๊นŒ ๋กœ์ง์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ค„ ์•Œ๊ณ  ๊ดœํžˆ ์ด๊ฒƒ์ €๊ฒƒ ๊ณ ์น˜๋ฉด์„œ 30๋ถ„์„ ๋‚ ๋ ธ๋‹ค.ใ…œ

fun bfs2(n:Int,k:Int):Int{

    if(n<k){
        val mark=Array(k*2+1){false}
        val dist=Array(k*2+1){0}
        val queue= mutableListOf<Int>()
        queue.add(n)
        mark[n]=true

        while(queue.isNotEmpty()){
            val current=queue.first()
            queue.removeFirst()

            if(current==k) break;

            if(current*2<dist.size&&!mark[current*2]) {
                queue.add(current * 2)
                dist[current*2]=dist[current]+1
                mark[current*2]=true
            }
            if(current>0&&!mark[current-1]) {
                queue.add(current - 1)
                dist[current-1]=dist[current]+1
                mark[current-1]=true
            }
            if(current+1<dist.size&&!mark[current+1]) {
                queue.add(current + 1)
                dist[current+1]=dist[current]+1
                mark[current+1]=true
            }
        }

        return dist[k]
    }else return n-k

}

๐Ÿ” Language Change(java)๐Ÿ” 

์ž๋ฐ”๋กœ ๋‹ค์‹œ ์ฝ”๋“œ ์งœ๋Š” ๊ฒŒ ๊ท€์ฐฎ๊ธด ํ•œ๋ฐ ํ”Œ๋กœ์šฐ๊ฐ€ ํ•œ๋ฒˆ ์ •๋ฆฌ๋˜๋Š” ๋Š๋‚Œ์ด๋ผ์„œ ์ข‹๋‹ค!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class S1_1697_catch_that_cow {

    public static void main(String[] args) throws IOException {

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringBuilder builder=new StringBuilder();

        String[] input=br.readLine().split(" ");
        int n=Integer.parseInt(input[0]);
        int k=Integer.parseInt(input[1]);

        builder.append(bfs(n,k));
        System.out.println(builder);

    }

    static int bfs(int n,int k){
        if(n<k){
            Queue<Integer> queue=new LinkedList<>();
            int[] dist=new int[k*2+1];
            boolean[] mark=new boolean[k*2+1];

            dist[n]=0;
            mark[n]=true;
            queue.add(n);

            while(!queue.isEmpty()){

                int current=queue.peek();
                queue.remove();

                if(current==k)break;
                if(current*2<dist.length&&!mark[current*2]){
                    queue.add(current*2);
                    mark[current*2]=true;
                    dist[current*2]=dist[current]+1;
                }
                if(current+1<dist.length&&!mark[current+1]){
                    queue.add(current+1);
                    mark[current+1]=true;
                    dist[current+1]=dist[current]+1;
                }
                if(current>0&&!mark[current-1]){
                    queue.add(current-1);
                    mark[current-1]=true;
                    dist[current-1]=dist[current]+1;
                }

            }
            return dist[k];
        }else return n-k;

    }

}

๐Ÿš€Advanced๐Ÿš€

[kotlin]

  • IntArray๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š๊ณ  ํฌ๊ธฐ๋งŒ ์žˆ๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

      IntArray(10)
    
    • ํ .. ์ดˆ๊ธฐํ™” ์•ˆํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰์‹œ๊ฐ„์ด ์งง์•„์งˆ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์™ ์ง€ ์ข€ ๋Š˜์–ด๋‚ฌ๋‹ค.. (780msโ†’784ms)
    • BooleanArray๋„ ์žˆ๊ธธ๋ž˜ ์ด๊ฒƒ๋„ ์ ์šฉํ•˜๋ฉด ๋” ๋Š˜์–ด๋‚œ๋‹ค(780msโ†’796ms)
    • GPT๋ง๋กœ๋Š” IntArray๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ•์‹ฑํ•˜์ง€ ์•Š์•„์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„์  ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ํŠน์ • ์ƒํ™ฉ(์ปดํŒŒ์ผ๋Ÿฌ,์บ์‹œํšจ๊ณผ,ํ…Œ์ŠคํŠธํ™˜๊ฒฝ)์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
    • ํ™•์‹คํžˆ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ•์‹ฑ์„ ์•ˆํ•˜๋Š” IntArray๊ฐ€ ๋œ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™๋‹ค(27632kbโ†’23960kb)
    • ์‹œ๊ฐ„ ์ธก๋ฉด์€ ๋‚˜์ค‘์— ๋˜ ๋น„๊ตํ•ด ๋ณผ ์ผ์ด ์žˆ์œผ๋ฉด ํ•œ๋ฒˆ ๋” ํ™•์ธํ•ด ๋ด์•ผ๊ฒ ๋‹ค.
  • ํ—‰ ๋‚˜๋ฆ„ ์–ด๋Š ์ •๋„๋Š” ์ฝ”ํ‹€๋ฆฐ์„ ์ž˜ ์“ฐ๊ณ  ์žˆ๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ํ˜„์‹ค์— ์•ˆ์ฃผํ•ด ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.. ๋” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๊ฒŒ ๋ฌธ๋ฒ•๊ณต๋ถ€๋ฅผ ํ‹ˆํ‹ˆํžˆ ํ•ด์•ผ๊ฒ ๋‹ค!
  • ํ๋ฅผ list๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  front, real๋กœ ์ธ๋ฑ์‹ฑํ•˜๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งค ์ˆ˜ ๋„ ์žˆ๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ