๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[BFS] 8. ์†ก์•„์ง€ ์ฐพ๊ธฐ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 4.

 

BFS ๋ฐฉ์‹์„ ํ†ตํ•ด ์†ก์•„์ง€๋ฅผ ์ฐพ์•˜๋‹ค.

 

DFS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” (๋ฌผ๋ก  ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ) Queue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•œ๋‹ค.

 

ch[] ๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ์ด๋ฏธ ๋“ค๋ฆฐ ์ž๋ฆฌ๋Š” 1๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ–ฅํ›„ ๋‹ค์‹œ ๊ทธ ์ž๋ฆฌ์— ์˜ค๊ฒŒ ๋˜๋ฉด ๋”์ด์ƒ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์ œ์™ธ์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋Š” ๋ฐ˜๋ณตํ•ด์„œ ์ผ์–ด๋‚œ ๊ณผ์ •์„ ์ง€์›€์œผ๋กœ์จ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ด๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

-๋‚˜์˜ ํ’€์ด-

runtime error

 

์ „์ฒด์ ์ธ ๋ฌธ์ œ๋Š” ์—†์–ด ๋ณด์ด์ง€๋งŒ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

class Main {
    int[] dt = {5, 1, -1};
    int[] ch;
    int L;

    private int BFS(int s, int e) {
        Queue<Integer> Q = new LinkedList<>();
        ch = new int[10001];
        ch[s] = 1;
        Q.offer(s);
        while (!Q.isEmpty()) {
            int len = Q.size();
            for (int i = 0; i < len; i++) {
                int nx = Q.poll();
                for(int x : dt) {
                    if (ch[nx + x] == 0) {
                        if (nx + x == e) return L + 1;
                        Q.offer(nx + x);
                        ch[nx + x] = 1;
                    }
                }
            }
            L++;
        }
        return 0;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int s = in.nextInt();
        int e = in.nextInt();
        System.out.println(T.BFS(s, e));
    }
}

 

๊ทธ ์ด์œ ๋Š” ์กฐ๊ฑด์˜ ๋ฌธ์ œ์˜€๋‹ค. ์กฐ๊ฑด์—์„œ 

[[์ฒซ ๋ฒˆ์งธ ์ค„์— ํ˜„์ˆ˜์˜ ์œ„์น˜ S์™€ ์†ก์•„์ง€์˜ ์œ„์น˜ E๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ง์„ ์˜ ์ขŒํ‘œ ์ ์€ 1๋ถ€ํ„ฐ 10,000๊นŒ์ง€์ด๋‹ค.]]

๋ผ๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์— ์ด๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋ฉด ch ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์„ ๋•Œ ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

ch๋ผ๋Š” ์ฒดํฌ์šฉ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด ์™”๋˜ ๊ณณ์„ ํ•œ ๋ฒˆ ๋” ์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์—†์•จ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์Œ์ˆ˜๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ๋„ ๋ง‰์•„์ค€๋‹ค. 

ํ•˜์ง€๋งŒ 1~10000์ด๋ผ๋Š” ์กฐ๊ฑด์ด ์—†์„ ๊ฒฝ์šฐ ๋ฐฐ์—ด๋กœ ํ†ตํ•ด ์ค‘๋ณต๋œ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์•ˆ ๋  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค !!

 

์ฆ‰, ํ™•์ธ์šฉ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–‘์ˆ˜์ธ ์ •์ˆ˜์˜ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

class Main {
    int[] dt = {5, 1, -1};
    int[] ch;
    int L;

    private int BFS(int s, int e) {
        Queue<Integer> Q = new LinkedList<>();
        ch = new int[10001];
        ch[s] = 1;
        Q.offer(s);
        while (!Q.isEmpty()) {
            int len = Q.size();
            for (int i = 0; i < len; i++) {
                int nx = Q.poll();
                for(int x : dt) {
                    int na = nx + x;
                    if (na >=1 && na <= 10000 && ch[na] == 0) {
                        if (na == e) return L + 1;
                        Q.offer(na);
                        ch[na] = 1;
                    }
                }
            }
            L++;
        }
        return 0;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int s = in.nextInt();
        int e = in.nextInt();
        System.out.println(T.BFS(s, e));
    }
}

 

 

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

import java.util.*;

class Main{
    int answre = 0;
    int[] dis = {1, -1, 5};
    int[] ch;
    Queue<Integer> Q = new LinkedList<>();
    public int BFS(int s, int e) {
        ch = new int[10001];
        ch[s] = 1;
        Q.offer(s);
        int L = 0;
        while (!Q.isEmpty()) {
            int len = Q.size();
            for (int i = 0; i < len; i++) {
                int x = Q.poll();
                for (int j = 0; j < 3; j++) {
                    int nx = x + dis[j];
                    if (nx == e) return L + 1;
                    if (nx >= 1 && nx <= 10000 && ch[nx] == 0) {
                        ch[nx] = 1;
                        Q.offer(nx);
                    }
                }
            }
            L++;
        }
        return -1;
    }





    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int s = in.nextInt();
        int e = in.nextInt();
        System.out.println(T.BFS(s, e));
    }
}

๋Œ“๊ธ€