728x90
🪨
https://www.acmicpc.net/problem/14248
14248번: 점프 점프
첫 번째 줄에는 돌다리의 돌 개수 n이 주어진다.(1≤n≤100,000) 돌의 번호는 왼쪽부터 1번에서 n번이다. 다음 줄에는 그 위치에서 점프할 수 있는 거리 Ai가 주어진다.(1≤Ai≤100,000) 다음 줄에는 출
www.acmicpc.net
내 풀이
def dfs(s):
if s > 0 and s <= n and not visited[s]:
visited[s] = True
dfs(s-stones[s-1])
dfs(s+stones[s-1])
n = int(input())
stones = list(map(int, input().split()))
s = int(input())
visited = [False] * (n+1)
dfs(s)
print(visited.count(True))
dfs(깊이 우선 탐색)으로 풀었다.
코드 설명
dfs의 매개변수로 현재위치(s)가 주어진다.현재 위치(s)가 범위를 벗어나지 않았고(돌다리 밖으로 나가지 않았고), 방문하지 않았던 돌다리였다면
if s > 0 and s <= n and not visited[s]:
방문 처리를 해준다. (방문 가능한 돌임을 알림)
visited[s] = True
그리고 돌에 적혀있는 숫자만큼 왼쪽으로 이동하는 경우와 오른쪽으로 이동하는 경우를 처리한다.
이동하게 될 위치를 매개변수로 넘겨 dfs를 호출한다.
dfs(s-stones[s-1]) # 왼쪽으로 이동
dfs(s+stones[s-1]) # 오른쪽으로 이동
이때 stones의 인덱스에 주의한다. s-1 !!
방문 가능한 돌의 개수가 정답이다.
visited.count(True)
'코딩테스트' 카테고리의 다른 글
[백준][Python] 1743 음식물 피하기 (1) | 2024.03.06 |
---|---|
[백준][Python] 1926 그림 (0) | 2024.03.05 |
[백준][Python] 1049 기타줄 (0) | 2024.03.05 |
[백준][Python] 28353 고양이 카페 (1) | 2024.03.03 |
[백준][Python] 1759 암호 만들기 (0) | 2024.03.02 |