[BOJ][๐ŸŸก5][๋ฐฑ์ค€#16928] ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #16928


๋ฌธ์ œ

๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„์„ ์ฆ๊ฒจ ํ•˜๋Š” ํ๋ธŒ๋Ÿฌ๋ฒ„๋Š” ์–ด๋Š ๋‚  ๊ถ๊ธˆํ•œ ์ ์ด ์ƒ๊ฒผ๋‹ค.

์ฃผ์‚ฌ์œ„๋ฅผ ์กฐ์ž‘ํ•ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ตœ์†Œ ๋ช‡ ๋ฒˆ๋งŒ์— ๋„์ฐฉ์ ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๊ฒŒ์ž„์€ ์ •์œก๋ฉด์ฒด ์ฃผ์‚ฌ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฃผ์‚ฌ์œ„์˜ ๊ฐ ๋ฉด์—๋Š” 1๋ถ€ํ„ฐ 6๊นŒ์ง€ ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ ํ˜€์žˆ๋‹ค. ๊ฒŒ์ž„์€ ํฌ๊ธฐ๊ฐ€ 10ร—10์ด๊ณ , ์ด 100๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๋ณด๋“œํŒ์—์„œ ์ง„ํ–‰๋œ๋‹ค. ๋ณด๋“œํŒ์—๋Š” 1๋ถ€ํ„ฐ 100๊นŒ์ง€ ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ ํ˜€์ ธ ์žˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด๋Š” ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋‚˜์˜จ ์ˆ˜๋งŒํผ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”Œ๋ ˆ์ด์–ด๊ฐ€ i๋ฒˆ ์นธ์— ์žˆ๊ณ , ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋‚˜์˜จ ์ˆ˜๊ฐ€ 4๋ผ๋ฉด, i+4๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ๊ฐ€ 100๋ฒˆ ์นธ์„ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ๋„์ฐฉํ•œ ์นธ์ด ์‚ฌ๋‹ค๋ฆฌ๋ฉด, ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ€๊ณ  ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๋ฑ€์ด ์žˆ๋Š” ์นธ์— ๋„์ฐฉํ•˜๋ฉด, ๋ฑ€์„ ๋”ฐ๋ผ์„œ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ด๋™ํ•œ ์นธ์˜ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์žˆ๋˜ ์นธ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ํฌ๊ณ , ๋ฑ€์„ ์ด์šฉํ•ด ์ด๋™ํ•œ ์นธ์˜ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์žˆ๋˜ ์นธ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค. ๊ฒŒ์ž„์˜ ๋ชฉํ‘œ๋Š” 1๋ฒˆ ์นธ์—์„œ ์‹œ์ž‘ํ•ด์„œ 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒŒ์ž„ํŒ์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค์•ผ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„ํŒ์— ์žˆ๋Š” ์‚ฌ๋‹ค๋ฆฌ์˜ ์ˆ˜ N(1 โ‰ค N โ‰ค 15)๊ณผ ๋ฑ€์˜ ์ˆ˜ M(1 โ‰ค M โ‰ค 15)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์‚ฌ๋‹ค๋ฆฌ์˜ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•˜๋Š” x, y (x < y)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. x๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋ฉด, y๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋ฑ€์˜ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•˜๋Š” u, v (u > v)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. u๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋ฉด, v๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 1๋ฒˆ ์นธ๊ณผ 100๋ฒˆ ์นธ์€ ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ์˜ ์‹œ์ž‘ ๋˜๋Š” ๋์ด ์•„๋‹ˆ๋‹ค. ๋ชจ๋“  ์นธ์€ ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ์‚ฌ๋‹ค๋ฆฌ ๋˜๋Š” ๋ฑ€์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋™์‹œ์— ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ํ•ญ์ƒ 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์‚ฌ์œ„๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๊ตด๋ ค์•ผ ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

3 7
32 62
42 68
12 98
95 13
97 25
93 37
79 27
75 19
49 47
67 17


์ถœ๋ ฅ

3


์˜ˆ์ œ 2

์ž…๋ ฅ

4 9
8 52
6 80
26 42
2 72
51 19
39 11
37 29
81 3
59 5
79 23
53 7
43 33
77 21


์ถœ๋ ฅ

5


My Sol

from collections import deque

L, S = map(int, input().split())
Ls = [0]*101
Ss = [0]*101
v = [0xffffff]*101
for _ in range(L):
    s, e = map(int, input().split())
    Ls[s] = e
for _ in range(S):
    s, e = map(int, input().split())
    Ss[s] = e

Q = deque()
Q.append(1)
v[1] = 0
cnt = 1
l = 1
while v[100]==0xffffff:
    for _ in range(l):
        n = Q.popleft()
        l -= 1

        for k in range(1, 7):
            s = n+k
            if s > 100: continue
            if v[s] <= cnt: continue
            # ๋ฐŸ์€ ์ž๋ฆฌ์— ๋ฑ€์ด ์žˆ๋‹ค๋ฉด
            if Ss[s]:
                if v[Ss[s]] > cnt:
                    v[Ss[s]] = cnt
                    Q.append(Ss[s])
                    l += 1
                continue

            # ํƒ์ƒ‰ ์œ„์น˜์— cnt๋ฅผ ์ง€์ •ํ•˜๊ณ , Q์— ์ขŒํ‘œ ์ถ”๊ฐ€
            v[s] = cnt
            Q.append(s)
            l += 1

            # ๋ฐŸ์€ ์ž๋ฆฌ์— ์‚ฌ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๊ณ , ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ€๊ณ  ์˜ฌ๋ผ๊ฐ„ ๊ณณ์˜ v๊ฐ€ cnt๋ณด๋‹ค ํฌ๋‹ค๋ฉด
            if Ls[s] and v[Ls[s]] > cnt:
                # cnt๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ขŒํ‘œ ์ถ”๊ฐ€
                v[Ls[s]] = cnt
                Q.append(Ls[s])
                l += 1
    cnt += 1

print(v[100])

BFS ์ตœ๋‹จ๊ฒฝ๋กœ ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ์˜ ์ถœ๋ฐœ์ ์„ ์ธ๋ฑ์Šค๋กœ ํ•˜๊ณ , ๋„์ฐฉ์ ์„ ๊ฐ’์œผ๋กœ ํ•˜๋Š” Ss, Ls ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋ฐฐ์—ด์— ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

๋ฐฉ๋ฌธ ์ฒดํฌ ๋ฐฐ์—ด v๋ฅผ ํฐ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์‹œ์ž‘์ ์ธ 1์„ ์นด์šดํŠธ 0์œผ๋กœ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด v[1] = 0์„ ํ‘œ์‹œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  cnt๋งˆ๋‹ค ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•ด Q์— ๋„ฃ์œผ๋ฉฐ, Q์˜ ๊ธธ์ด๋งŒํผ ํ•ญ๋ชฉ์„ ๋นผ์„œ ์‹œ์ž‘์ ์„ ์žก๊ณ  1๋ถ€ํ„ฐ 6๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ตฌํ•œ๋‹ค.

ํƒ์ƒ‰ ์ขŒํ‘œ๋Š” 100์„ ๋„˜์„ ์ˆ˜ ์—†์œผ๋ฉฐ, ์ด๋ฏธ ์ง€๋‚˜๊ฐ„ ์ž๋ฆฌ์ด๋ฉด์„œ cnt๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋Š” ์ด๋ฏธ ์ตœ์†Œ๊ฒฝ๋กœ๋ฅผ ๋ฐŸ์€ ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐฑ์‹ ํ•  ํ•„์š” ์—†์ด ๋„˜์–ด๊ฐ„๋‹ค.

๋งŒ์•ฝ ๋ฐŸ์€ ์ž๋ฆฌ์— ๋ฑ€์ด ์žˆ๋‹ค๋ฉด ๋” ๋‚˜์•„๊ฐ€์ง€ ๋ชปํ•˜๋Š”๋ฐ, ๋ฑ€์„ ๋ฐŸ์•„ ๋ฏธ๋„๋Ÿฌ์ง„ ๋„์ฐฉ์ ์˜ v๊ฐ€ cnt๋ณด๋‹ค ํฌ๋‹ค๋ฉด cnt๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ  Q์— ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๊ณ , v๊ฐ€ ๋” ์ž‘๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋˜๊ฒ ๋‹ค. ๋ฑ€์€ ๋ฏธ๋„๋Ÿฌ์ ธ ๋‚ด๋ ค๊ฐ€๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” v๊ฐ€ cnt๋ณด๋‹ค ๋” ์ž‘์„ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฑ€์ด ์•„๋‹Œ ์ผ๋ฐ˜ ์นธ์ด๋‚˜ ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ๋ฐŸ๋Š” ๊ฒฝ์šฐ์ผํ…๋ฐ, ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์นธ ์ž์ฒด๋Š” cnt๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  Q์— ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š”๋ฐ, ์‚ฌ๋‹ค๋ฆฌ์ธ ๊ฒฝ์šฐ ์œ„์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•œ๋‹ค. ๋งŒ์•ฝ ์‚ฌ๋‹ค๋ฆฌ์ด๊ณ , ์‚ฌ๋‹ค๋ฆฌ์˜ ๋„์ฐฉ์ ์˜ v๊ฐ’์ด cnt๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋„์ฐฉ์ ๋„ cnt๋กœ ๊ฐฑ์‹ ํ•˜๊ณ , ๋„์ฐฉ์ ์˜ ์ขŒํ‘œ๋„ Q์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์ด ๋ชจ๋“  ์ผ๋ จ์˜ ๊ณผ์ •์ด ๋๋‚˜๋ฉด cnt๋ฅผ 1 ์˜ฌ๋ฆฌ๋ฉฐ ๋‹ค์Œ ์ด๋™์„ ์ƒ๊ฐํ•ด์ค€๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

from collections import deque
n,m = map(int,input().split())
dic = {}
for _ in range(n+m):
  a,b = map(int,input().split())
  dic[a] = b

def search ():
  visited = [False for _ in range(101)]
  visited[1] = True
  q = deque()
  q.append((1,0))
  while q:
    idx,cnt = q.popleft()
    if idx == 100:
      return cnt
      break
    for i in range(1,7):
      next_ = idx+i
      if next_ > 100 : continue
      if visited[next_] : continue
      visited[next_] = True
      if next_ in dic:
        next_ = dic[next_]
        visited[next_]
      q.append((next_,cnt+1))

print(search())

์‹คํ–‰์‹œ๊ฐ„๋„ ์†Œํญ ์ฐจ์ด๋‚˜๊ณ , ์ฝ”๋“œ๊ฐ€ ์ ˆ๋ฐ˜์ •๋„๋ฐ–์— ๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ ๊ฐ€์ ธ์™€๋ณด์•˜๋‹ค.

๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ์˜ ๊ตฌ๋ถ„์„ ๋‘์ง€ ์•Š๊ณ , dictionary์— ๋ชจ๋‘ ๋„ฃ์—ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹œ์ž‘์ ์„ key๋กœ, ๋„์ฐฉ์ ์„ ๊ฐ’์œผ๋กœ ๋‘์—ˆ๋‹ค.

๋‚˜๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ์ด ๋ถ„์€ BFS๋ฐฉ์‹์œผ๋กœ visit ํ–ˆ๋˜ ๊ณณ์ด๋ผ๋ฉด passํ•˜๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜์˜€๋‹ค. ์ด๋ž˜๋„ ๋˜๋Š”๊ฑด๊ฐ€?

ํƒ์ƒ‰ ์ขŒํ‘œ๊ฐ€ 100์ด ๋˜๋ฉด Q์— ์‹œ์ž‘์ ๊ณผ ํ•จ๊ป˜ ์ €์žฅํ•ด๋‘” cnt๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ถœ๋ ฅํ•œ๋‹ค. ํƒ์ƒ‰ ์ขŒํ‘œ๊ฐ€ visitํ–ˆ๋˜ ๊ณณ์ด๋ฉด ๋„˜์–ด๊ฐ„๋‹ค. ์ด๋•Œ๋ถ€ํ„ฐ ํƒ์ƒ‰ ์ขŒํ‘œ๋ฅผ visit ์ฒ˜๋ฆฌํ•˜๊ณ , ๋ฑ€์‚ฌ๋‹ค๋ฆฌ ๋”•์…”๋„ˆ๋ฆฌ์˜ key์— ํƒ์ƒ‰ ์ขŒํ‘œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋„์ฐฉ์ ๋„ visited ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ฑ€์ด๋“  ์‚ฌ๋‹ค๋ฆฌ์ด๋“  ๋„์ฐฉ์ ์€ ์ฒดํฌ๋˜๋Š” ๊ฒƒ์ด ๋™์ผํ•˜๊ณ , ๋งŒ์•ฝ ์ด๋ฏธ ์ฒดํฌ๊ฐ€ ๋˜์–ด์žˆ์–ด๋„ ์ƒ๊ด€์€ ์—†๋‹ค. Q์— cnt๋ฅผ 1 ์ถ”๊ฐ€ํ•ด์„œ ๋„ฃ์–ด์ฃผ๋Š”๋ฐ, ๋ฑ€์ด๋‚˜ ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ๋ฐŸ์œผ๋ฉด ๋„์ฐฉ์ ์˜ ์ขŒํ‘œ๋ฅผ ์ƒํ–ฅ/ํ•˜ํ–ฅ๋œ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•ด ๋„ฃ๋Š”๋‹ค.

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