ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
1xN์ ๋ฏธ๋ก์๋ ๊ฐ ์นธ์ ์ ์๊ฐ ์ ํ์๋ค. ์๋ฅผ ๋ค์ด ์นธ์ 3์ด ์ ํ์๋ค๋ฉด ํ์ฌ ์์น์์ +1, +2, +3์ผ๋ก ์ ํํ ์ ์๋ค. ์ด๋, ์ต์ํ์ผ๋ก ์ ํํ์ฌ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ๊ฐ ์ ์์ ๊ฒฝ์ฐ ์ ํ ํ์๋ฅผ ๋ฐํํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ -1์ ๋ฐํํ์ฌ์ผ ํ๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ BFS๋ฅผ ํตํด, ํ์ฌ ์์น์์ ํ์ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ํ์์ ์งํํ๋ฉด ๋๋ค. ๋ง์ฝ BFS๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ์ฌ๋ ๋ต์ ์ฐพ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ -1์ ๋ฐํํ๋ฉด ๋๋ค.
- BFS๋ฅผ ํ์ํ๋๋ฐ ์์ด ์๋์ ๊ฐ์ ์กฐ๊ฑด์ ํ์ธํ์ฌ์ผ ํ๋ค.
- ํ์ํ๊ณ ์ ํ๋ ์ธ๋ฑ์ค๊ฐ N๋ณด๋ค ์์๊ฐ?
- N๋ณด๋ค ์ปค์ง๋ค๋ฉด ํ์ํ ํ์๊ฐ ์๋ค.
- ์ธ๋ฑ์ค ์ค๋ฅ๋ ๋ฐ์์ํจ๋ค.
- ํ์ํ๊ณ ์ ํ๋ ์นธ์ ์ ํ ๊ฐ๋ฅํ ์๊ฐ 0๋ณด๋ค ํฐ๊ฐ?
- 0์ด๋ผ๋ฉด ํด๋น ์นธ์์ ์ ํํ ์ ์์ผ๋ฏ๋ก ํ์์์ ์ ์ธํ๋ค.
- ํ ๋ฒ์ด๋ผ๋ ๋ฐฉ๋ฌธํ์ง ์์๋๊ฐ?
- ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ๋ผ๋ฉด 3์นธ์ ๋ฐ๋ ๊ฒฝ์ฐ ํ์ฌ ์นธ์์ 1, 2, 3 ์์ ์นธ์ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ค.
- ๋ฐ๋ผ์ ์ฌ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ์ฌ์ผ ํ๋ค.
- ํ์ํ๊ณ ์ ํ๋ ์ธ๋ฑ์ค๊ฐ N๋ณด๋ค ์์๊ฐ?
์ฝ๋
from sys import stdin
from collections import deque
def visitable(idx):
return idx < n and a[idx] > 0 and not visited[idx]
def bfs(start):
q = deque([start])
while q:
idx, cnt = q.popleft()
if idx + 1 == n:
return cnt
for i in range(a[idx] + 1):
next_idx = idx + i
if visitable(next_idx):
visited[next_idx] = True
q.append((next_idx, cnt + 1))
return -1
if __name__ == '__main__':
n = int(stdin.readline())
a = list(map(int, stdin.readline().split()))
visited = [True] + [False] * (n - 1)
print(bfs([0, 0]))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 12101 1, 2, 3 ๋ํ๊ธฐ 2 (0) | 2020.09.28 |
---|---|
๋ฐฑ์ค: 14238 ์ถ๊ทผ ๊ธฐ๋ก (0) | 2020.09.27 |
๋ฐฑ์ค: 16936 ๋3๊ณฑ2 (0) | 2020.09.26 |
๋ฐฑ์ค: 16938 ์บ ํ ์ค๋น (0) | 2020.09.26 |
๋ฐฑ์ค: 12869 ๋ฎคํ๋ฆฌ์คํฌ (0) | 2020.09.25 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ