인프런 커뮤니티 질문&답변

kongkongkong님의 프로필 이미지
kongkongkong

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

섹션7) 16.사다리 타기(DFS)

작성

·

244

·

수정됨

0

안녕하세요, 강사님!

강사님 풀이법 외에 제 코드로 풀면 어느 부분이 문제인지 알고 싶습니다.


import sys 
sys.stdin=open("input.txt", "r") 

#좌, 우를 우선 탐색하도록 설정
dx=[0,0,1,-1]
dy=[-1,1,0,0]

def DFS(x,y): 
    #특정 지점(2)에 도착하면 출발점 반환
    if x==n-1 and board[x][y]==2: 
        print(start) 
    else: 
        for i in range(4):
            xx=x+dx[i] 
            yy=y+dy[i] 
            if 0<=xx<n and 0<=yy<n and board[xx][yy]==1:
                board[xx][yy]=0
                DFS(xx,yy) 
                board[xx][yy]=1

if __name__=="__main__": 
    n=10 
    board=[list(map(int, input().split())) for _ in range(n)] 
    
    # 값이 1인 출발점을 찾기 
    for j in range(n): 
        if board[0][j]==1:
            start=j
            DFS(0,j) 

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

0번 행에서 1을 발견해서 아래로 내려가는 사다리 타기를 하려면 4뱡향 탐색이 아니라 영상의 방법처럼 현재지점의 왼쪽, 오른쪽 , 아래 중 하나로만 이동해서 n-1행까지 가야 합니다. 그리고 n-1행으로 갔을때 그때 그 지점이 2가 아닐 경우 재귀를 종료해야 하고, 다시 0번 행에서 1을 발견해 재귀호출의 다시 시작해야 합니다.

영상의 방법처럼 n-1행에서 2를 발견하고 위로 올라가는 방법이 코드의 간결성이나 시간복잡도 측면에서 매우 좋습니다. 영상의 방법을 추천합니다.

kongkongkong님의 프로필 이미지
kongkongkong

작성한 질문수

질문하기