인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

융s님의 프로필 이미지
융s

작성한 질문수

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

16. 사다리 타기(DFS)

혹시 이런방식으로 풀어도 괜찮을까요?

작성

·

178

0

선생님께선 bottom-up방식이셨네요... 전 처음에풀때 top-down방식으로 한번 해보았습니다. 혹시 이런방식도 가능한지 여쭤보고싶습니다~

def DFS(x,y):
    if x == n-1:
        if a[x][y] == 2:
            print(sp)
        return
    else:
        cnt = 0
        a[x][y] = 0

        // 갈림길 조정 - 만약에 아래로뻗는 방향밖에없다면 그대로 좌우아래 검색, 만약 아래랑 좌우중 한개가 같이있을경우 무조건 좌우만 검색하게끔
        for j in range(3):
            tx = x+dx[j]
            ty = y+dy[j]
            if 0<=tx<n and 0<=ty<n and (a[tx][ty] == 1 or a[tx][ty] == 2):
                cnt += 1
        if cnt == 1:
            loop = 3
        else:
            loop = 2
        for j in range(loop):
            tx = x+dx[j]
            ty = y+dy[j]
            
            if 0<=tx<n and 0<=ty<n and (a[tx][ty] == 1 or a[tx][ty] == 2):
                DFS(tx, ty)
                a[tx][ty] = 1
        
        for z in a:
            print(z)
        print()
n = 10
a = [
    [1,0,1,0,0,1,0,1,0,1],
    [1,0,1,1,1,1,0,1,0,1],
    [1,0,1,0,0,1,0,1,0,1],
    [1,0,1,0,0,1,0,1,1,1],
    [1,0,1,0,0,1,0,1,0,1],
    [1,0,1,1,1,1,0,1,0,1],
    [1,0,1,0,0,1,0,1,1,1],
    [1,1,1,0,0,1,0,1,0,1],
    [1,0,1,0,0,1,1,1,0,1],
    [1,0,1,0,0,2,0,1,0,1]
]

dx = [0, 0, 1]
dy = [1, -1, 0]
sp = 0
for i in range(len(a[0])):
    if a[0][i] == 1:
        sp = i
        print(sp)
        a[0][i] = 0
        DFS(0,i)

답변 1

0

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

안녕하세요^^

네. 사다리타기는 시간복잡도를 따지는 어려운 문제는 아니라서 답만 잘 나오면 됩니다.

융s님의 프로필 이미지
융s

작성한 질문수

질문하기