2022. 3. 11. 17:22ใ๐ฑ Algorithm/BFS DFS
https://www.acmicpc.net/problem/11060
์ฒ์ ํผ ์ฝ๋ ( ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ )
์๊ฐ ์ด๊ณผ๋ ์๋๊ณ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฌ๋ค. ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ฅผ ์์ฌํด ๋ณผ ๋ถ๋ถ์ ๋ฐฐ์ด์ด๋ ํ์ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ ๊ณณ์ด๋ค.
์๋ ์ฝ๋์์๋ ๋ฑ(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 |