p_도둑질_42897

source school.programmers.co.kr/learn/course...
type 📌 개발노트
topics 600-알고리즘 & 코딩테스트 603 동적프로그래밍
types 문제풀이
정답여부 모름

생각

dfs로 모든경우의 수를 탐색하면 될것이라고 생각햇다.

첫코드

answer = 0
house_num =0
def solution(money):
    global answer
    global house_num
    house_num = len(money)
    max_v = -1
    visited = [0] * house_num
    dfs(visited,0,money,0)
    # 1- 2 3- 1 4
    return answer

def dfs(visited, nowi , money,sum):
    global answer
    global house_num 
    if(sum>answer):
        answer=sum
    if(nowi>house_num-1):
        return
    print(visited,nowi,sum)
    if(money[nowi]>0 and visited[nowi]==0):
        if not isNearbyVisited(visited,nowi):
            print("visit")
            visited[nowi]=1
            # 방문을 한경우
            dfs(visited,nowi+2,money,sum+money[nowi])
            visited[nowi]=0
    # 방문을 안한경우
    dfs(visited,nowi+1,money,sum)


def isNearbyVisited(visited,index):
    global house_num
    left = index-1
    right = index +1
    if left<0 :
        left+=house_num
    if right>house_num-1:
        right-=house_num
    return visited[left] or visited[right]

dfs 로 모든 경우의 수를 탐색하는 방법이다.
2^n승에 가까운 시간복잡도를 가진다.
하지만 시간초과로 틀렷다...

두번째 코드

그 시점에서 최대의 갈수있는 최대의 값을 선택한다.