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 |