์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์†ก์•„์ง€ ์ฐพ๊ธฐ 1 (BFS : Breadth-First Search)

2023. 11. 24. 16:29ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

https://hyejin.tistory.com/1259

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ (BFS : Breadth-Fir

https://hyejin.tistory.com/1258 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS) https://hyejin.tistory.com/1257 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DF

hyejin.tistory.com

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

8. ์†ก์•„์ง€ ์ฐพ๊ธฐ 1 (BFS : Breadth-First Search)

์„ค๋ช…

ํ˜„์ˆ˜๋Š” ์†ก์•„์ง€๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ๋‹ค. ๋‹คํ–‰ํžˆ ์†ก์•„์ง€์—๋Š” ์œ„์น˜์ถ”์ ๊ธฐ๊ฐ€ ๋‹ฌ๋ ค ์žˆ๋‹ค.

ํ˜„์ˆ˜์˜ ์œ„์น˜์™€ ์†ก์•„์ง€์˜ ์œ„์น˜๊ฐ€ ์ˆ˜์ง์„ ์ƒ์˜ ์ขŒํ‘œ ์ ์œผ๋กœ ์ฃผ์–ด์ง€๋ฉด ํ˜„์ˆ˜๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ ์†ก์•„์ง€์˜ ์œ„์น˜๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

์†ก์•„์ง€๋Š” ์›€์ง์ด์ง€ ์•Š๊ณ  ์ œ์ž๋ฆฌ์— ์žˆ๋‹ค.

ํ˜„์ˆ˜๋Š” ์Šค์นด์ด ์ฝฉ์ฝฉ์„ ํƒ€๊ณ  ๊ฐ€๋Š”๋ฐ ํ•œ ๋ฒˆ์˜ ์ ํ”„๋กœ ์•ž์œผ๋กœ 1, ๋’ค๋กœ 1, ์•ž์œผ๋กœ 5๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ตœ์†Œ ๋ช‡ ๋ฒˆ์˜ ์ ํ”„๋กœ ํ˜„์ˆ˜๊ฐ€ ์†ก์•„์ง€์˜ ์œ„์น˜๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

์ ํ”„์˜ ์ตœ์†ŒํšŸ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๋‹ต์€ 1์ด์ƒ์ด๋ฉฐ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ž…๋ ฅ 1 

5 14

 

์˜ˆ์‹œ ์ถœ๋ ฅ 1

3

 

 

๋ฌธ์ œ ํ’€์ด 1

public class FindTheCalf
{
   static int[] ch; // ๊ฐ”๋˜ ์ขŒํ‘œ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
   static int[] jump = { -1, 1, 5 }; // jump -1, 1, 5
   
   public int  BFS(int s, int e) // L ์€ ํ˜„์žฌ ์œ„์น˜
   {
      int answer = 0;
      Queue<Integer> Q = new LinkedList<>();
      int L = 1; // ์ ํ”„ ํšŸ์ˆ˜
      Q.offer(s);
      
      while (!Q.isEmpty())
      {
         int len = Q.size();
         for (int j = 0; j < len; j++)
         {
            Integer cur = Q.poll();
            for (int i = 0; i < jump.length; i++)
            {
               if (cur + jump[i] > 0)
               {
                  if(cur + jump[i] == e)
                  {
                     return L;
                  }
                  else if (ch[cur + jump[i]] == 0)
                  {
                     Q.offer(cur + jump[i]);
                     ch[cur + jump[i]] = 1;
                  }
               }
            }
         }
         L++; // ํ•œ ๋ฒˆ ๋” ์ ํ”„
      }
      
      return L;
   }
   
   public static void main(String[] args)
   {
      FindTheCalf findTheCalf = new FindTheCalf();
      Scanner scanner = new Scanner(System.in);
      int s = scanner.nextInt(); // ํ˜„์ˆ˜์˜ ์œ„์น˜
      int e = scanner.nextInt(); // ์†ก์•„์ง€์˜ ์œ„์น˜
      ch = new int[10001];
      
      int result = findTheCalf.BFS(s, e);
      System.out.println(result);
   }
}

๐Ÿ‘ฉ‍๐Ÿ’ป : ์„น์…˜ 7์—์„œ ๋“œ๋””์–ด ๋‚ด๊ฐ€ ์ง์ ‘ ํ’€์–ด์„œ ์ •๋‹ต์„ ๊ตฌํ–ˆ๋‹ค........โญ

 

https://hyejin.tistory.com/1258

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS)

https://hyejin.tistory.com/1257 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ https://hyejin.tistory.com/1256 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS

hyejin.tistory.com

https://hyejin.tistory.com/1259

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ (BFS : Breadth-Fir

https://hyejin.tistory.com/1258 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS) https://hyejin.tistory.com/1257 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DF

hyejin.tistory.com

๋ถ€๋ถ„ ์ง‘ํ•ฉ ํ’€์ด๋ž‘ ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ BFS ํ’€์ด์—์„œ ํžŒํŠธ๋ฅผ ์–ป์–ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. 

 

์ ํ”„ ํšŸ์ˆ˜๊ฐ€ ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ BFS ํ’€์ด์˜ ๋ ˆ๋ฒจ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

์ด๋ ‡๊ฒŒ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ•œ ๋…ธ๋“œ์—์„œ -1, 1, 5 ์ด๋ ‡๊ฒŒ ์ ํ”„ํ•ด์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๊ตณ์ด ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋…ธ๋“œ๋Š” ๋˜ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ถ€๋ถ„ ์ง‘ํ•ฉ๋•Œ์ฒ˜๋Ÿผ ๋ฐฐ์—ด ch๋ฅผ ๋งŒ๋“ค๊ณ , ํฌ๊ธฐ๋Š” ์ขŒํ‘œ๊ฐ€ 10000๊นŒ์ง€๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ 10000+1 ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋…ธ๋“œ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0 ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์ค€๋‹ค. 

 

1๏ธโƒฃ

static int[] ch; // ๊ฐ”๋˜ ์ขŒํ‘œ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
static int[] jump = { -1, 1, 5 }; // jump -1, 1, 5

 

๋”ฐ๋ผ์„œ ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋„ ch ๋ฐฐ์—ด์— ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” 1 ์•„๋‹ˆ๋ฉด 0 ์œผ๋กœ ์„ค์ •์„ ํ•ด์ค„ ๊ฒƒ์ด๊ณ , 

jump ๋ผ๋Š” ๋ฐฐ์—ด์— -1, 1, 5 ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๋‹ด์•„์คฌ๋‹ค.

 

 

2๏ธโƒฃ

int answer = 0;
Queue<Integer> Q = new LinkedList<>();
int L = 1; // ์ ํ”„ ํšŸ์ˆ˜
Q.offer(s);

๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—๋„ Queue๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ ˆ๋ฒจ์— ๋”ฐ๋ฅธ ์›์†Œ๋ฅผ ๋‹ด์•„์ค„ ๊ฒƒ์ด๋‹ค. 

๊ทธ๋ฆฌ๊ณ  L์€ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด๋’€๋Š”๋ฐ 0์œผ๋กœ ํ•ด๋„๋˜๊ณ  ์ƒ๊ด€ ์—†๋‹ค. 

๊ทผ๋ฐ ๋‚˜๋Š” ๊ทธ๋ƒฅ ํ˜„์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์†ก์•„์ง€ ์œ„์น˜์™€ ๊ฐ™์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์€ ์ ํ”„๋ฅผ ํ• ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ 1๋กœ ํ•ด์คฌ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋ณด๋‹ˆ๊นŒ ๋‹ต์€ ๋ฐ˜๋“œ์‹œ 1 ์ด์ƒ์ด๋ฉฐ ๋ฐ˜๋“œ์‹œ ๋‹ต์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— L์„ 1๋กœ ์ค˜๋„ ๋œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ํ˜„์ˆ˜์˜ ์œ„์น˜์ธ s๋ฅผ root ๋…ธ๋“œ๋กœ ๋จผ์ € Q์— offer ํ•ด์ค€๋‹ค. 

(์ด์ œ ๋ณด๋‹ˆ๊นŒ answer ๋ณ€์ˆ˜๋Š” ํ•„์š” ์—†์Œ) 

 

 

 

3๏ธโƒฃ

while (!Q.isEmpty())
{
   int len = Q.size();
   for (int j = 0; j < len; j++)
   {
      Integer cur = Q.poll();
      for (int i = 0; i < jump.length; i++)
      {
         if (cur + jump[i] > 0)
         {
            if(cur + jump[i] == e)
            {
               return L;
            }
            else if (ch[cur + jump[i]] == 0)
            {
               Q.offer(cur + jump[i]);
               ch[cur + jump[i]] = 1;
            }
         }
      }
   }
   L++; // ํ•œ ๋ฒˆ ๋” ์ ํ”„
}

๊ทธ๋ฆฌ๊ณ  ์ด์ œ while ๋ฌธ์„ Q๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„ ๋•Œ ๊นŒ์ง€ ๋Œ๋ฉด์„œ ์†ก์•„์ง€์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ๋‚˜์„œ๋ฉด ๋œ๋‹ค. 

 

๋จผ์ € Q์˜ size๋ฅผ len ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์„œ for๋ฌธ์„ Q์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋Œ๋ฆฌ๋ฉด์„œ Q์—์„œ pollํ•œ cur ์ขŒํ‘œ์—  -1, 1, 5 ๋ฅผ ๊ฐ๊ฐ ๋”ํ•ด ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ด ์ž์‹ ๋…ธ๋“œ(์ขŒํ‘œ)๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ฏ€๋กœ cur + jump[i]๊ฐ€ 0๋ณด๋‹ค ์ปค์•ผ ํ•˜๊ณ , ๋งŒ์•ฝ ์ด๊ฒŒ e์™€ ๊ฐ™์œผ๋ฉด ๋ฐ”๋กœ L๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋˜๊ณ , e ์†ก์•„์ง€ ์œ„์น˜์™€๋Š” ๋‹ค๋ฅธ๋ฐ ch[cur + jump[i]] ๊ฐ€ 0์ด๋ผ๋ฉด ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ(์ขŒํ‘œ)์ด๋ฏ€๋กœ Q์— offer ํ•ด์ฃผ๊ณ , ๋ฐฐ์—ด์˜ ๊ฐ’์„ 1๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. (๊ทธ๋Ÿผ ๋‹ค์Œ์—” Q์— offer ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.  ๊ตณ์ด ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ ์•„๋‹ˆ์—ˆ๋˜ ๋…ธ๋“œ๋ฅผ ๋˜ Q์— offer ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋งŒ ๋Š˜์–ด๋‚œ๋‹ค!) 

 

Q์˜ size๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋ชจ๋‘ ๋Œ๊ณ  ๋‚˜๋ฉด ํ•ด๋‹น ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ (์ขŒํ‘œ)๋Š” ๋ชจ๋‘ ํ•œ๋ฒˆ ์”ฉ ๋Œ์•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์ด์ œ ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•œ๋‹ค. (ํ•œ๋ฒˆ ๋” ์ ํ”„) 

 

์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์ฃผ๋ฉด ์ตœ์†Œ ์ ํ”„ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

๋ฌธ์ œ ํ’€์ด 2

public class FindTheCalf2
{
   int[] dis = { 1, -1, 5 };
   int[] ch; // ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์€ Q์— ๋„ฃ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ
   
   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; // root node level
      
      while (!Q.isEmpty())
      {
         int len = Q.size(); // level์— ์žˆ๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜
         
         for (int i = 0; i < len; i++)
         {
            int x = Q.poll();
            for (int j = 0; j < dis.length; j++)
            {
               int nx = x + dis[j]; // ์ž์‹ ๋…ธ๋“œ
               if (nx == e) return L + 1; // ํ˜„์žฌ L์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์ด๋ฏ€๋กœ nx์˜ ๋ ˆ๋ฒจ๋กœ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด +1 ๋ฅผ ํ•ด์ค€๋‹ค.
               if (nx >= 1 && nx <= 10000 && ch[nx] == 0) { // ๋ฐฉ๋ฌธ x
                  ch[nx] = 1;
                  Q.offer(nx);
               }
            }
         }
         L++;
      }
      
      return L;
   }
   
   public static void main(String[] args)
   {
      FindTheCalf2 findTheCalf2 = new FindTheCalf2();
      Scanner scanner = new Scanner(System.in);
      int s = scanner.nextInt(); // ํ˜„์ˆ˜์˜ ์œ„์น˜
      int e = scanner.nextInt(); // ์†ก์•„์ง€์˜ ์œ„์น˜
      
      int result = findTheCalf2.BFS(s, e);
      System.out.println(result);
   }
}

 

๐Ÿ‘พ : ๋ฌธ์ œ ํ’€์ด2๋Š” ๊ฐ•์‚ฌ๋‹˜ ๋ฌธ์ œ ํ’€์ด์ด๋‹ค. 

 

int[] dis = { 1, -1, 5 };
int[] ch; // ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์€ Q์— ๋„ฃ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ

Queue<Integer> Q = new LinkedList<>();

๊ฐ•์‚ฌ๋‹˜๋„ ๋‚˜์™€ ๊ฐ™์ด dis ๋ฐฐ์—ด์— -1, 1, 5 ์ ํ”„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๋‹ด์•„๋’€๊ณ , ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์€ Q์— offer ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ ch ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด์คฌ๋‹ค. 

 

public int BFS(int s, int e)
{
   ch = new int[10001];
   ch[s] = 1;
   Q.offer(s);
   int L = 0; // root node level
   
   while (!Q.isEmpty())
   {
      int len = Q.size(); // level์— ์žˆ๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜
      
      for (int i = 0; i < len; i++)
      {
         int x = Q.poll();
         for (int j = 0; j < dis.length; j++)
         {
            int nx = x + dis[j]; // ์ž์‹ ๋…ธ๋“œ
            if (nx == e) return L + 1; // ํ˜„์žฌ L์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์ด๋ฏ€๋กœ nx์˜ ๋ ˆ๋ฒจ๋กœ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด +1 ๋ฅผ ํ•ด์ค€๋‹ค.
            if (nx >= 1 && nx <= 10000 && ch[nx] == 0) { // ๋ฐฉ๋ฌธ x
               ch[nx] = 1;
               Q.offer(nx);
            }
         }
      }
      L++;
   }
   
   return L;
}

ํ™•์‹คํžˆ ๊ฐ•์‚ฌ๋‹˜ ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•˜๊ตฌ๋‚˜... ๋‚ด ์ฝ”๋“œ๋„ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•  ๋“ฏ... ์ค‘๋ณต์ฝ”๋“œ๊ฐ€ ๊ฝค ๋งŽ๋‹ค. 

 

ch = new int[10001];
ch[s] = 1;
Q.offer(s);
int L = 0; // root node level

๋จผ์ € ch๋Š” ์ขŒํ‘œ๊ฐ€ 10000๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•˜๋‹ˆ๊นŒ 10000์— ์ธ๋ฑ์Šค 0์€ ์•ˆ์“ธ๊ฑฐ๋‹ˆ๊นŒ + 1 ๋ฅผ ํ•ด์„œ 10001 ๋กœ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ch[s]๋Š” ํ˜„์ˆ˜์˜ ์œ„์น˜์ด๋ฏ€๋กœ ํ˜„์ˆ˜์˜ ์œ„์น˜๋ฅผ 1๋กœ ์„ ์–ธํ•ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ Q์— ํ˜„์ˆ˜์˜ ์œ„์น˜ s๋ฅผ ๋จผ์ € offer ํ•ด์ค€๋‹ค. 

๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ํ˜„์ˆ˜์˜ ์œ„์น˜๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•ด์„œ ์ด์ œ ๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉฐ ๋ฐ‘์œผ๋กœ ์ญ‰์ญ‰ ๋‚ด๋ ค๊ฐˆ ๊ฒƒ์ด๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ•์‚ฌ๋‹˜์€ L์„ root node์˜ ๋ ˆ๋ฒจ์ธ 0์œผ๋กœ ์„ค์ •ํ•ด์คฌ๋‹ค. 

 

while (!Q.isEmpty())
{
   int len = Q.size(); // level์— ์žˆ๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜
   
   for (int i = 0; i < len; i++)
   {
      int x = Q.poll();
      for (int j = 0; j < dis.length; j++)
      {
         int nx = x + dis[j]; // ์ž์‹ ๋…ธ๋“œ
         if (nx == e) return L + 1; // ํ˜„์žฌ L์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์ด๋ฏ€๋กœ nx์˜ ๋ ˆ๋ฒจ๋กœ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด +1 ๋ฅผ ํ•ด์ค€๋‹ค.
         if (nx >= 1 && nx <= 10000 && ch[nx] == 0) { // ๋ฐฉ๋ฌธ x
            ch[nx] = 1;
            Q.offer(nx);
         }
      }
   }
   L++;
}

์ด์ œ while๋ฌธ์„ Q๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ

๋จผ์ € Q์˜ size๋ฅผ ๊ตฌํ•˜๊ณ  ์ด ํฌ๊ธฐ๋งŒํผ for๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค. (ํ•ด๋‹น ๋ ˆ๋ฒจ์— ๋“ค์–ด์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค.) 

 

๋จผ์ € Q์—์„œ ํ•˜๋‚˜๋ฅผ poll ํ•ด์„œ ์ด๋ฅผ x๋ผ๊ณ  ํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  dis ํฌ๊ธฐ๋งŒํผ for๋ฌธ์„ ๋Œ๋ฉด์„œ x์— -1, 1, 5 ๊ฐ’์„ ๋”ํ•ด์ฃผ๋Š”๋ฐ (์ด๊ฒŒ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค.)

 

์ด ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋งŒ์•ฝ ์†ก์•„์ง€์˜ ์œ„์น˜๋‹ค! ํ•˜๋ฉด ํ˜„์žฌ L์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ๋ฆฌํ„ดํ•  ๋•Œ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ๋กœ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด return L + 1 ๋ฅผ ํ•ด์ฃผ๊ณ  ๋๋‚œ๋‹ค. 

 

์ž์‹ ๋…ธ๋“œ๋Š” ์ขŒํ‘œ๊ฐ€ 1๋ถ€ํ„ฐ 10000์‚ฌ์ด ์ด๋ฏ€๋กœ ์ด ๋ฒ”์œ„ ์•ˆ์— ํ•ด๋‹นํ•ด์•ผํ•˜๊ณ  (์Œ์ˆ˜ ์•ˆ๋จ), ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค์˜ ch ๋ฐฐ์—ด์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ch[nx] == 0 ์ด๋ผ๋ฉด ch[nx] ์„ 1๋กœ ์„ค์ •ํ•ด์ฃผ๊ณ , Q์— nx ๊ฐ’์„ offer ํ•ด์ค€๋‹ค. (๋‹ค์Œ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋กœ ์ •ํ•ด์คŒ) 

 

์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ญ‰์ญ‰ ๋‚ด๋ ค๊ฐ€๋ฉด ๋œ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

728x90

'์ธํ”„๋Ÿฐ > ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : Tree ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ (BFS)  (0) 2023.11.27
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : Tree ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ (DFS)  (2) 2023.11.27
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ (BFS : Breadth-First Search)  (0) 2023.11.23
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS)  (1) 2023.11.22
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ  (0) 2023.11.21