๋ฐฑ์ค€ ์ ํ”„ ์ ํ”„ 11060 ํŒŒ์ด์ฌ

2022. 3. 11. 17:22ใ†๐Ÿ”ฑ Algorithm/BFS DFS

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

 

11060๋ฒˆ: ์ ํ”„ ์ ํ”„

์žฌํ™˜์ด๊ฐ€ 1×N ํฌ๊ธฐ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜€์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” 1×1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ ์นธ์—๋Š” ์ •์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์“ฐ์—ฌ ์žˆ๋‹ค. i๋ฒˆ์งธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋ฅผ Ai๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์žฌํ™˜์ด๋Š” Ai์ดํ•˜๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ

www.acmicpc.net

 

 

์ฒ˜์Œ ํ‘ผ ์ฝ”๋“œ ( ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ )

์‹œ๊ฐ„ ์ดˆ๊ณผ๋„ ์•„๋‹ˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.  ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ์˜์‹ฌํ•ด ๋ณผ ๋ถ€๋ถ„์€ ๋ฐฐ์—ด์ด๋‚˜ ํ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ณณ์ด๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ๋ฑ(deque)์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๋ถ€๋ถ„์„ ์˜์‹ฌํ•ด ๋ณผ ๋งŒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

import sys
from collections import deque

input = sys.stdin.readline

t = int(input())
board = list(map(int, input().split()))

answer = -1
curr_idx = 0
jump = 0
queue = deque()
queue.append((curr_idx, jump))
while queue:
    curr_idx, jump = queue.popleft()
    if curr_idx == len(board) - 1:
        print(jump)
        exit()

    for i in range(1, board[curr_idx] + 1):
        queue.append((curr_idx + i, jump + 1))
print(-1)

queue ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊พธ์ค€ํžˆ ๋ฐ€์–ด๋„ฃ๊ณ  ์žˆ๋Š”๋ฐ, ๋ถ„๋ช… ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๋„ append ๋˜๊ณ  ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋Ÿผ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ ์ฒดํฌํ•  ๋กœ์ง์„ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

 

์ •๋‹ต ์ฝ”๋“œ

์œ„์—์„œ ์ถ”์ธกํ•œ๋Œ€๋กœ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ queue ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋„๋ก if ๋ฌธ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

visited ๋ผ๋Š” ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ์ด๋ฏธ queue ์— ๋“ค์–ด๊ฐ„ ์ ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€, ๋‹ค์‹œ queue ์— ๋“ค์–ด๊ฐ€๋Š” ์ผ์ด ์—†๋„๋ก ์ฒดํฌํ–ˆ๋‹ค.

import sys
from collections import deque

input = sys.stdin.readline

t = int(input())
board = list(map(int, input().split()))

curr_idx, jump = 0, 0
queue = deque()
queue.append((curr_idx, jump))
visited = []

while queue:
    curr_idx, jump = queue.popleft()
    if curr_idx == len(board) - 1:
        print(jump)
        exit()

    for i in range(1, board[curr_idx] + 1):
        next_idx = curr_idx + i
        if next_idx not in visited:
            queue.append((next_idx, jump + 1))
            visited.append(next_idx)
print(-1)

'๐Ÿ”ฑ Algorithm > BFS DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 2210 ์ˆซ์žํŒ๊ด€๋ฆฌ ํŒŒ์ด์ฌ  (0) 2022.12.29
๋ฐฑ์ค€ 7569 ํŒŒ์ด์ฌ  (0) 2022.01.26