[ BOJ / Python ] 14248번 점프 점프

황승환·2022년 1월 31일
0

Python

목록 보기
141/498


이번 문제는 깊이우선탐색을 통해 해결하였다. 현재의 위치에서 갈 수 있는 왼쪽과 오른쪽의 인덱스를 저장하고 왼쪽, 오른쪽 인덱스가 돌다리 범위 내에 존재하고 아직 방문하지 않은 경우에 방문하도록 재귀함수를 호출하는 방식으로 접근하였다. 그리고 마지막에 방문처리 리스트를 보면서 방문처리된 개수를 출력하였다.

  • dfs함수를 cur을 인자로 갖도록 하여 선언한다.
    -> visited[cur]을 True로 갱신한다.
    -> 왼쪽 인덱스를 저장할 변수 left에 cur-arr[cur]을 저장한다.
    -> 오른쪽 인덱스를 저장할 변수 right에 cur+arr[cur]을 저장한다.
    -> 만약 left가 0보다 크거나 같고 visited[left]가 False일 경우 dfs(left)를 재귀호출한다.
    -> 만약 right가 n보다 작고 visited[right]가 False일 경우 dfs(right)를 재귀호출한다.
  • n을 입력받는다.
  • 돌다리의 정보를 저장할 리스트 arr을 선언하고 입력받는다.
  • s를 입력받는다.
  • 방문처리에 사용할 리스트 visited를 False n개로 채운다.
  • dfs(s-1)을 호출한다. (인덱스는 0부터 시작하므로 s가 3이라면 인덱스 2부터 시작해야함. 그러므로 s-1 사용)
  • visited에서 True의 개수를 호출한다.

Code

def dfs(cur):
    visited[cur]=True
    left=cur-arr[cur]
    right=cur+arr[cur]
    if left>=0 and visited[left]==False:
        dfs(left)
    if right<n and visited[right]==False:
        dfs(right)
n=int(input())
arr=list(map(int, input().split()))
s=int(input())
visited=[False for _ in range(n)]
dfs(s-1)
print(visited)
print(visited.count(True))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글