본문 바로가기
알고리즘 (Python)

휴가(DFS)

by ppirae 2022. 4. 5.

인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.

https://inf.run/7EX2

 

파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의

파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...

www.inflearn.com

강의 풀이

#강의 풀이
def DFS(L, sum):
    global res
    if L == n+1:
        if sum > res:
            res = sum
    else:
        if L+T[L] <= n+1:
            DFS(L+T[L], sum+P[L])
        DFS(L+1, sum)

if __name__ == "__main__":
    n = int(input())
    T = list()
    P = list()
    for i in range(n):
        a, b = map(int, input().split())
        T.append(a)
        P.append(b)
    res = -2147000000
    T.insert(0, 0)
    P.insert(0, 0)
    DFS(1, 0)
    print(res)

T는 상담시 걸리는 일수이고

P는 상담시 받을수 있는 액수이다.

인덱스로 편하게 사용하기 위해 각각 맨 앞자리에 0을 추가한다.

 

DFS에서 L(level)이 8에 도달하면 retrun하고

sum 값의 최댓값을 결과 res에 저장한다.

 

else에서 DFS는 상담을 하는 것과 안하는것 두갈래로 나눈다.

만약 L + T[L]이 8일 안에 들어간다면 상담을 하고

아니라면 안하는 것으로 DFS  재귀를 돌린다.

 

'알고리즘 (Python)' 카테고리의 다른 글

22/08/08 백준하면서 간단한 기록  (0) 2022.08.08
동전 바꿔주기(DFS)  (0) 2022.04.05
최대점수 구하기(DFS)  (0) 2022.04.04
수열 추측하기(순열, 파스칼 응용)  (0) 2022.04.02
순열 구하기 (DFS)  (0) 2022.04.02

댓글